From be3560b3b57f079597ad57c067da00c14c019870 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Thu, 17 Apr 2025 04:24:49 +0530 Subject: [PATCH 01/51] add pdp subgraph --- subgraph/.gitignore | 34 + subgraph/abis/PDPService.json | 356 ++++ subgraph/abis/PDPVerifier.json | 776 +++++++ subgraph/docker-compose.yml | 50 + subgraph/networks.json | 12 + subgraph/package.json | 22 + subgraph/schema.graphql | 104 + subgraph/src/pdp-service.ts | 199 ++ subgraph/src/pdp-verifier.ts | 893 ++++++++ subgraph/subgraph.yaml | 72 + subgraph/tests/pdp-verifier-utils.ts | 183 ++ subgraph/tests/pdp-verifier.test.ts | 46 + subgraph/tsconfig.json | 4 + subgraph/utils/index.ts | 5 + subgraph/yarn.lock | 2935 ++++++++++++++++++++++++++ 15 files changed, 5691 insertions(+) create mode 100644 subgraph/.gitignore create mode 100644 subgraph/abis/PDPService.json create mode 100644 subgraph/abis/PDPVerifier.json create mode 100644 subgraph/docker-compose.yml create mode 100644 subgraph/networks.json create mode 100644 subgraph/package.json create mode 100644 subgraph/schema.graphql create mode 100644 subgraph/src/pdp-service.ts create mode 100644 subgraph/src/pdp-verifier.ts create mode 100644 subgraph/subgraph.yaml create mode 100644 subgraph/tests/pdp-verifier-utils.ts create mode 100644 subgraph/tests/pdp-verifier.test.ts create mode 100644 subgraph/tsconfig.json create mode 100644 subgraph/utils/index.ts create mode 100644 subgraph/yarn.lock diff --git a/subgraph/.gitignore b/subgraph/.gitignore new file mode 100644 index 0000000..b542c60 --- /dev/null +++ b/subgraph/.gitignore @@ -0,0 +1,34 @@ +# Graph CLI generated artifacts +build/ +generated/ + +# Dependency directories +node_modules/ +jspm_packages/ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# dotenv environment variables file +.env + +# Testing +coverage +coverage.json + +# Typechain +typechain +typechain-types + +# Hardhat files +cache diff --git a/subgraph/abis/PDPService.json b/subgraph/abis/PDPService.json new file mode 100644 index 0000000..a2cbed9 --- /dev/null +++ b/subgraph/abis/PDPService.json @@ -0,0 +1,356 @@ +[ + { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "NO_CHALLENGE_SCHEDULED", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "NO_PROVING_DEADLINE", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "challengeWindow", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getChallengesPerProof", + "inputs": [], + "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getMaxProvingPeriod", + "inputs": [], + "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "initChallengeWindowStart", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_pdpVerifierAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "nextChallengeWindowStart", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nextProvingPeriod", + "inputs": [ + { "name": "proofSetId", "type": "uint256", "internalType": "uint256" }, + { + "name": "challengeEpoch", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "", "type": "uint256", "internalType": "uint256" }, + { "name": "", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pdpVerifierAddress", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "possessionProven", + "inputs": [ + { "name": "proofSetId", "type": "uint256", "internalType": "uint256" }, + { "name": "", "type": "uint256", "internalType": "uint256" }, + { "name": "", "type": "uint256", "internalType": "uint256" }, + { + "name": "challengeCount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proofSetCreated", + "inputs": [ + { "name": "proofSetId", "type": "uint256", "internalType": "uint256" }, + { "name": "creator", "type": "address", "internalType": "address" }, + { "name": "", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proofSetDeleted", + "inputs": [ + { "name": "proofSetId", "type": "uint256", "internalType": "uint256" }, + { + "name": "deletedLeafCount", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "provenThisPeriod", + "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "provingDeadlines", + "inputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rootsAdded", + "inputs": [ + { "name": "proofSetId", "type": "uint256", "internalType": "uint256" }, + { "name": "firstAdded", "type": "uint256", "internalType": "uint256" }, + { + "name": "rootData", + "type": "tuple[]", + "internalType": "struct PDPVerifier.RootData[]", + "components": [ + { + "name": "root", + "type": "tuple", + "internalType": "struct Cids.Cid", + "components": [ + { "name": "data", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "rawSize", "type": "uint256", "internalType": "uint256" } + ] + }, + { "name": "", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rootsScheduledRemove", + "inputs": [ + { "name": "proofSetId", "type": "uint256", "internalType": "uint256" }, + { "name": "rootIds", "type": "uint256[]", "internalType": "uint256[]" }, + { "name": "", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "thisChallengeWindowStart", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "FaultRecord", + "inputs": [ + { + "name": "proofSetId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "periodsFaulted", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "deadline", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { "name": "target", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { "name": "owner", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }] + } +] diff --git a/subgraph/abis/PDPVerifier.json b/subgraph/abis/PDPVerifier.json new file mode 100644 index 0000000..dbdca4c --- /dev/null +++ b/subgraph/abis/PDPVerifier.json @@ -0,0 +1,776 @@ +[ + { "type": "constructor", "inputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "BURN_ACTOR", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "EXTRA_DATA_MAX_SIZE", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "FIL_USD_PRICE_FEED_ID", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "LEAF_SIZE", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_ENQUEUED_REMOVALS", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "MAX_ROOT_SIZE", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "NO_CHALLENGE_SCHEDULED", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "NO_PROVEN_EPOCH", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PYTH", + "inputs": [], + "outputs": [ + { "name": "", "type": "address", "internalType": "contract IPyth" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "RANDOMNESS_PRECOMPILE", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SECONDS_IN_DAY", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [{ "name": "", "type": "string", "internalType": "string" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addRoots", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { + "name": "rootData", + "type": "tuple[]", + "internalType": "struct PDPVerifier.RootData[]", + "components": [ + { + "name": "root", + "type": "tuple", + "internalType": "struct Cids.Cid", + "components": [ + { "name": "data", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "rawSize", "type": "uint256", "internalType": "uint256" } + ] + }, + { "name": "extraData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "calculateProofFee", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { + "name": "estimatedGasFee", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "claimProofSetOwnership", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "createProofSet", + "inputs": [ + { + "name": "listenerAddr", + "type": "address", + "internalType": "address" + }, + { "name": "extraData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "deleteProofSet", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { "name": "extraData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "findRootIds", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { + "name": "leafIndexs", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct PDPVerifier.RootIdAndOffset[]", + "components": [ + { "name": "rootId", "type": "uint256", "internalType": "uint256" }, + { "name": "offset", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getChallengeFinality", + "inputs": [], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getChallengeRange", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getFILUSDPrice", + "inputs": [], + "outputs": [ + { "name": "", "type": "uint64", "internalType": "uint64" }, + { "name": "", "type": "int32", "internalType": "int32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNextChallengeEpoch", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNextProofSetId", + "inputs": [], + "outputs": [{ "name": "", "type": "uint64", "internalType": "uint64" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNextRootId", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getProofSetLastProvenEpoch", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getProofSetLeafCount", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getProofSetListener", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getProofSetOwner", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "", "type": "address", "internalType": "address" }, + { "name": "", "type": "address", "internalType": "address" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRandomness", + "inputs": [ + { "name": "epoch", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRootCid", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { "name": "rootId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct Cids.Cid", + "components": [ + { "name": "data", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRootLeafCount", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { "name": "rootId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getScheduledRemovals", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [ + { "name": "", "type": "uint256[]", "internalType": "uint256[]" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_challengeFinality", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "nextProvingPeriod", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { + "name": "challengeEpoch", + "type": "uint256", + "internalType": "uint256" + }, + { "name": "extraData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proofSetLive", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proposeProofSetOwner", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "provePossession", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { + "name": "proofs", + "type": "tuple[]", + "internalType": "struct PDPVerifier.Proof[]", + "components": [ + { "name": "leaf", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "proof", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rootChallengable", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { "name": "rootId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rootLive", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { "name": "rootId", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "scheduleRemovals", + "inputs": [ + { "name": "setId", "type": "uint256", "internalType": "uint256" }, + { "name": "rootIds", "type": "uint256[]", "internalType": "uint256[]" }, + { "name": "extraData", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Debug", + "inputs": [ + { + "name": "message", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NextProvingPeriod", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "challengeEpoch", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "leafCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PossessionProven", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "challenges", + "type": "tuple[]", + "indexed": false, + "internalType": "struct PDPVerifier.RootIdAndOffset[]", + "components": [ + { "name": "rootId", "type": "uint256", "internalType": "uint256" }, + { "name": "offset", "type": "uint256", "internalType": "uint256" } + ] + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProofFeePaid", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "fee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "price", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "expo", + "type": "int32", + "indexed": false, + "internalType": "int32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProofSetCreated", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProofSetDeleted", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "deletedLeafCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProofSetEmpty", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProofSetOwnerChanged", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "oldOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RootsAdded", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rootIds", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RootsRemoved", + "inputs": [ + { + "name": "setId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "rootIds", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { "name": "target", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { "type": "error", "name": "ERC1967NonPayable", "inputs": [] }, + { "type": "error", "name": "FailedCall", "inputs": [] }, + { + "type": "error", + "name": "IndexedError", + "inputs": [ + { "name": "idx", "type": "uint256", "internalType": "uint256" }, + { "name": "msg", "type": "string", "internalType": "string" } + ] + }, + { "type": "error", "name": "InvalidInitialization", "inputs": [] }, + { "type": "error", "name": "NotInitializing", "inputs": [] }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { "name": "owner", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { "name": "account", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "UUPSUnauthorizedCallContext", "inputs": [] }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [{ "name": "slot", "type": "bytes32", "internalType": "bytes32" }] + } +] diff --git a/subgraph/docker-compose.yml b/subgraph/docker-compose.yml new file mode 100644 index 0000000..a008fc9 --- /dev/null +++ b/subgraph/docker-compose.yml @@ -0,0 +1,50 @@ +version: "3" +services: + graph-node: + image: graphprotocol/graph-node + ports: + - "8000:8000" + - "8001:8001" + - "8020:8020" + - "8030:8030" + - "8040:8040" + depends_on: + - ipfs + - postgres + extra_hosts: + - host.docker.internal:host-gateway + environment: + postgres_host: postgres + postgres_user: graph-node + postgres_pass: let-me-in + postgres_db: graph-node + ipfs: "ipfs:5001" + ethereum: "mainnet:http://host.docker.internal:8545" + GRAPH_LOG: info + ipfs: + image: ipfs/kubo:v0.17.0 + ports: + - "5001:5001" + volumes: + - ./data/ipfs:/data/ipfs + postgres: + image: postgres:14 + ports: + - "5432:5432" + command: + [ + "postgres", + "-cshared_preload_libraries=pg_stat_statements", + "-cmax_connections=200", + ] + environment: + POSTGRES_USER: graph-node + POSTGRES_PASSWORD: let-me-in + POSTGRES_DB: graph-node + # FIXME: remove this env. var. which we shouldn't need. Introduced by + # , maybe as a + # workaround for https://github.com/docker/for-mac/issues/6270? + PGDATA: "/var/lib/postgresql/data" + POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C" + volumes: + - ./data/postgres:/var/lib/postgresql/data diff --git a/subgraph/networks.json b/subgraph/networks.json new file mode 100644 index 0000000..e92dffe --- /dev/null +++ b/subgraph/networks.json @@ -0,0 +1,12 @@ +{ + "filecoin": { + "PDPVerifier": { + "address": "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6", + "startBlock": 4853581 + }, + "PDPService": { + "address": "0x805370387fA5Bd8053FD8f7B2da4055B9a4f8019", + "startBlock": 4853585 + } + } +} diff --git a/subgraph/package.json b/subgraph/package.json new file mode 100644 index 0000000..4f123e9 --- /dev/null +++ b/subgraph/package.json @@ -0,0 +1,22 @@ +{ + "name": "pd", + "license": "UNLICENSED", + "scripts": { + "codegen": "graph codegen", + "build": "graph build", + "deploy": "graph deploy --node https://api.studio.thegraph.com/deploy/ pd", + "create-local": "graph create --node http://localhost:8020/ pd", + "remove-local": "graph remove --node http://localhost:8020/ pd", + "deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 pd", + "test": "graph test" + }, + "dependencies": { + "@graphprotocol/graph-cli": "0.97.0", + "@graphprotocol/graph-ts": "0.37.0", + "axios": "^1.8.4", + "node-fetch": "^3.3.2" + }, + "devDependencies": { + "matchstick-as": "0.6.0" + } +} diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql new file mode 100644 index 0000000..429dff3 --- /dev/null +++ b/subgraph/schema.graphql @@ -0,0 +1,104 @@ +type ProofSet @entity(immutable: false) { + id: Bytes! + setId: BigInt! # uint256 + listener: Bytes! # address + owner: Bytes! # address + leafCount: BigInt! # uint256 + challengeRange: BigInt! # uint256 + isActive: Boolean! + lastProvenEpoch: BigInt! # uint256 + nextChallengeEpoch: BigInt! # uint256 + totalRoots: BigInt! # uint256 + totalDataSize: BigInt! # uint256 + totalProvedRoots: BigInt! # uint256 + totalFeePaid: BigInt! # uint256 + totalFaultedPeriods: BigInt! # uint256 + createdAt: BigInt! + updatedAt: BigInt! + blockNumber: BigInt! +} + +type Provider @entity(immutable: false) { + id: Bytes! + address: Bytes! + proofSetIds: [BigInt!] + totalFaultedPeriods: BigInt! + totalDataSize: BigInt! + createdAt: BigInt! + updatedAt: BigInt! + blockNumber: BigInt! +} + +type Root @entity(immutable: false) { + id: Bytes! + setId: BigInt! # uint256 + rootId: BigInt! # uint256 + rawSize: BigInt! # uint256 + cid: String! + removed: Boolean! + totalProofsSubmitted: BigInt! # uint256 + totalPeriodsFaulted: BigInt! # uint256 + lastProvenEpoch: BigInt! # uint256 + lastProvenAt: BigInt! # uint256 + lastFaultedEpoch: BigInt! # uint256 + lastFaultedAt: BigInt! # uint256 + createdAt: BigInt! + updatedAt: BigInt! + blockNumber: BigInt! +} + +type EventLog @entity(immutable: true) { + id: Bytes! + setId: BigInt! # uint256 + address: Bytes! + name: String! + data: String! + logIndex: BigInt! + transactionHash: Bytes! + createdAt: BigInt! + blockNumber: BigInt! +} + +type Transaction @entity(immutable: true) { + id: Bytes! + hash: Bytes! + proofSetId: BigInt! # uint256 + height: BigInt! # uint256 + fromAddress: Bytes! # address + toAddress: Bytes # address + value: BigInt! # uint256 + method: String! + status: Boolean! + createdAt: BigInt! +} + +type Proof @entity(immutable: true) { + id: Bytes! + setId: BigInt! # uint256 + rootId: BigInt! # uint256 + proofOffset: BigInt! # uint256 + provenAt: BigInt! # uint256 + blockNumber: BigInt! +} + +type ProofFee @entity(immutable: true) { + id: Bytes! + setId: BigInt! # uint256 + proofFee: BigInt! # uint256 + filUsdPrice: BigInt! # uint256 + filUsdPriceExponent: BigInt! # int32 + blockNumber: BigInt! + createdAt: BigInt! +} + +type FaultRecord @entity(immutable: true) { + id: Bytes! + proofSetId: BigInt! # uint256 + rootIds: [BigInt!]! # uint256[] + currentChallengeEpoch: BigInt! # uint256 + nextChallengeEpoch: BigInt! # uint256 + periodsFaulted: BigInt! # uint256 + deadline: BigInt! # uint256 + createdAt: BigInt! + blockNumber: BigInt! +} diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts new file mode 100644 index 0000000..bb2bc83 --- /dev/null +++ b/subgraph/src/pdp-service.ts @@ -0,0 +1,199 @@ +import { BigInt, Bytes, crypto, Address } from "@graphprotocol/graph-ts"; +import { FaultRecord as FaultRecordEvent } from "../generated/PDPService/PDPService"; +import { + PDPVerifier, + PDPVerifier__findRootIdsResultValue0Struct, +} from "../generated/PDPVerifier/PDPVerifier"; +import { PDPVerifierAddress, NumChallenges } from "../utils"; +import { + EventLog, + ProofSet, + Provider, + FaultRecord, + Root, +} from "../generated/schema"; + +/** + * Pads a Buffer or Uint8Array to 32 bytes with leading zeros. + */ +function padTo32Bytes(input: Uint8Array): Uint8Array { + if (input.length >= 32) return input; + const out = new Uint8Array(32); + out.set(input, 32 - input.length); + return out; +} + +/** + * Generates a deterministic challenge index using seed, proofSetID, proofIndex, and totalLeaves. + * Mirrors the logic from Go's generateChallengeIndex. + */ +export function generateChallengeIndex( + seed: Uint8Array, + proofSetID: BigInt, + proofIndex: i32, + totalLeaves: BigInt +): BigInt { + // seed: 32 bytes + // proofSetID: big-endian, 32 bytes + // proofIndex: big-endian, 8 bytes + const data = new Uint8Array(32 + 32 + 8); + + // Copy seed + data.set(seed, 0); + + // proofSetID to 32 bytes big-endian + const psIDBuf = padTo32Bytes(Bytes.fromBigInt(proofSetID)); + data.set(psIDBuf, 32); + + // proofIndex to 8 bytes big-endian + const idxBuf = Bytes.fromI32(proofIndex); + data.set(idxBuf, 64); + + // Keccak-256 + const hashBytes = crypto.keccak256(Bytes.fromUint8Array(data)); + + // Convert hash to bigint, mod totalLeaves + const hashInt = BigInt.fromByteArray(hashBytes); + const challengeIndex = hashInt.mod(totalLeaves); + return challengeIndex; +} + +export function findChallengedRoots( + proofSetId: BigInt, + nextChallengeEpoch: BigInt, + totalLeaves: BigInt, + blockNumber: BigInt +): BigInt[] { + const instance = PDPVerifier.bind( + Address.fromBytes(Bytes.fromHexString(PDPVerifierAddress)) + ); + + const seedInt = instance.getRandomness(nextChallengeEpoch); + const seed = Bytes.fromBigInt(seedInt); + if (seed.length === 0) { + return []; + } + + const challenges: BigInt[] = []; + for (let i = 0; i < NumChallenges; i++) { + const leafIdx = generateChallengeIndex( + seed, + proofSetId, + i32(i), + totalLeaves + ); + challenges.push(leafIdx); + } + + const rootIds = instance.findRootIds(proofSetId, challenges); + const rootIdsArray: BigInt[] = []; + for (let i = 0; i < rootIds.length; i++) { + rootIdsArray.push(rootIds[i].rootId); + } + return rootIdsArray; +} + +export function handleFaultRecord(event: FaultRecordEvent): void { + // get nextChallengeEpoch from transaction input + // nextChallengeEpoch will be second parameter to the function nextProvingPeriod + // so extract second parameter from transaction input + // escape first 5 bytes of function selector then next 32 bytes for first parameter + const nextChallengeEpoch = BigInt.fromI32(event.transaction.input[5 + 32]); + + const setId = event.params.proofSetId; + + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; + eventLog.address = event.address; + eventLog.name = "FaultRecord"; + eventLog.data = + "{proofSetId:" + + setId.toString() + + ",periodsFaulted:" + + event.params.periodsFaulted.toString() + + ",deadline:" + + event.params.deadline.toString() + + "}"; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.save(); + + const setIdBA = Bytes.fromBigInt(setId); + const proofSet = ProofSet.load(Bytes.fromByteArray(setIdBA)); + + if (!proofSet) return; + + const challengeEpoch = proofSet.nextChallengeEpoch; + const proofSetOwner = proofSet.owner; + const totalLeaves = proofSet.challengeRange; + + proofSet.totalFaultedPeriods = proofSet.totalFaultedPeriods.plus( + event.params.periodsFaulted + ); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + const provider = Provider.load(proofSetOwner); + if (!provider) return; + + provider.totalFaultedPeriods = provider.totalFaultedPeriods.plus( + event.params.periodsFaulted + ); + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); + + const rootIds = findChallengedRoots( + setId, + challengeEpoch, + totalLeaves, + event.block.number + ); + if (rootIds.length === 0) return; + + // get unique rootIds + let uniqueRootIds: BigInt[] = []; + for (let i = 0; i < rootIds.length; i++) { + let isDuplicate = false; + for (let j = 0; j < uniqueRootIds.length; j++) { + if (uniqueRootIds[j] == rootIds[i]) { + isDuplicate = true; + break; + } + } + if (!isDuplicate) { + uniqueRootIds.push(rootIds[i]); + } + } + + for (let i = 0; i < uniqueRootIds.length; i++) { + const rootId = uniqueRootIds[i]; + const id = Bytes.fromBigInt(setId).concatI32(rootId.toI32()); + const root = Root.load(Bytes.fromByteArray(id)); + if (!root) return; + + root.totalPeriodsFaulted = root.totalPeriodsFaulted.plus( + event.params.periodsFaulted + ); + root.lastFaultedEpoch = event.block.number; + root.lastFaultedAt = event.block.timestamp; + root.updatedAt = event.block.timestamp; + root.blockNumber = event.block.number; + root.save(); + } + + const faultRecord = new FaultRecord(eventId); + faultRecord.proofSetId = setId; + faultRecord.rootIds = rootIds; + faultRecord.currentChallengeEpoch = challengeEpoch; + faultRecord.nextChallengeEpoch = nextChallengeEpoch; + faultRecord.periodsFaulted = event.params.periodsFaulted; + faultRecord.deadline = event.params.deadline; + faultRecord.createdAt = event.block.timestamp; + faultRecord.blockNumber = event.block.number; + faultRecord.save(); +} diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts new file mode 100644 index 0000000..f5b19a2 --- /dev/null +++ b/subgraph/src/pdp-verifier.ts @@ -0,0 +1,893 @@ +import { BigInt, Bytes, log } from "@graphprotocol/graph-ts"; +import { + NextProvingPeriod as NextProvingPeriodEvent, + PossessionProven as PossessionProvenEvent, + ProofFeePaid as ProofFeePaidEvent, + ProofSetCreated as ProofSetCreatedEvent, + ProofSetEmpty as ProofSetEmptyEvent, + ProofSetDeleted as ProofSetDeletedEvent, + ProofSetOwnerChanged as ProofSetOwnerChangedEvent, + RootsAdded as RootsAddedEvent, + RootsRemoved as RootsRemovedEvent, +} from "../generated/PDPVerifier/PDPVerifier"; +import { + EventLog, + Proof, + ProofFee, + ProofSet, + Root, + Provider, + Transaction, +} from "../generated/schema"; + +// Define a class for the structure instead of a type alias +class ParsedRootDetail { + rootId: BigInt; + rawSize: BigInt; + rootBytes: Bytes; +} + +export function handleProofSetCreated(event: ProofSetCreatedEvent): void { + const listenerAddr = Bytes.fromUint8Array( + event.transaction.input.subarray(16, 36) + ); + + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = event.params.setId; + eventLog.address = event.address; + eventLog.name = "ProofSetCreated"; + eventLog.data = + "{setId:" + + event.params.setId.toString() + + ",owner:" + + event.params.owner.toHexString() + + "}"; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.save(); + + const transaction = new Transaction(event.transaction.hash); + transaction.hash = event.transaction.hash; + transaction.proofSetId = event.params.setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; + transaction.value = event.transaction.value; + transaction.method = "createProofSet"; + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.save(); + + const id = Bytes.fromBigInt(event.params.setId); + let proofSet = new ProofSet(Bytes.fromByteArray(id)); + proofSet.setId = event.params.setId; + proofSet.owner = event.params.owner; + proofSet.listener = listenerAddr; + proofSet.isActive = true; + proofSet.leafCount = BigInt.fromI32(0); + proofSet.challengeRange = BigInt.fromI32(0); + proofSet.lastProvenEpoch = BigInt.fromI32(0); + proofSet.nextChallengeEpoch = BigInt.fromI32(0); + proofSet.totalRoots = BigInt.fromI32(0); + proofSet.totalDataSize = BigInt.fromI32(0); + proofSet.totalFeePaid = BigInt.fromI32(0); + proofSet.totalFaultedPeriods = BigInt.fromI32(0); + proofSet.totalProvedRoots = BigInt.fromI32(0); + proofSet.createdAt = event.block.timestamp; + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + let provider = Provider.load(event.params.owner); + if (provider) { + let ids = provider.proofSetIds; + if (ids == null) { + ids = [event.params.setId]; + } else { + ids = ids.concat([event.params.setId]); + } + provider.proofSetIds = ids; + provider.blockNumber = event.block.number; + provider.createdAt = event.block.timestamp; + provider.updatedAt = event.block.timestamp; + } else { + provider = new Provider(event.params.owner); + provider.address = event.params.owner; + provider.totalFaultedPeriods = BigInt.fromI32(0); + provider.totalDataSize = BigInt.fromI32(0); + provider.proofSetIds = [event.params.setId]; + provider.blockNumber = event.block.number; + provider.createdAt = event.block.timestamp; + provider.updatedAt = event.block.timestamp; + } + provider.save(); +} + +export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { + const setId = event.params.setId; + const deletedLeafCount = event.params.deletedLeafCount; + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = event.params.setId; + eventLog.address = event.address; + eventLog.name = "ProofSetDeleted"; + eventLog.data = + "{setId:" + + setId.toString() + + ",deletedLeafCount:" + + deletedLeafCount.toString() + + "}"; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.save(); + + const id = Bytes.fromBigInt(setId); + const proofSet = ProofSet.load(Bytes.fromByteArray(id)); + if (!proofSet) { + return; + } + proofSet.isActive = false; + proofSet.owner = Bytes.fromI32(0); + proofSet.totalRoots = BigInt.fromI32(0); + proofSet.totalDataSize = BigInt.fromI32(0); + proofSet.nextChallengeEpoch = BigInt.fromI32(0); + proofSet.lastProvenEpoch = BigInt.fromI32(0); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + const provider = Provider.load(proofSet.owner); + if (!provider) { + return; + } + provider.totalDataSize = provider.totalDataSize.minus(proofSet.totalDataSize); + const ids = provider.proofSetIds; + let nextIds: BigInt[] = []; + if (ids) { + for (let i = 0; i < ids.length; i++) { + if (ids[i] != setId) { + nextIds.push(ids[i]); + } + } + } + provider.proofSetIds = nextIds; + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); +} + +export function handleProofSetOwnerChanged( + event: ProofSetOwnerChangedEvent +): void { + const setId = event.params.setId; + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; + eventLog.address = event.address; + eventLog.name = "ProofSetOwnerChanged"; + eventLog.data = + "{setId:" + + setId.toString() + + ",oldOwner:" + + event.params.oldOwner.toHexString() + + ",newOwner:" + + event.params.newOwner.toHexString() + + "}"; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.save(); + + const id = Bytes.fromBigInt(setId); + const proofSet = ProofSet.load(Bytes.fromByteArray(id)); + if (!proofSet) { + return; + } + proofSet.owner = event.params.newOwner; + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + const oldProvider = Provider.load(event.params.oldOwner); + if (oldProvider) { + const ids = oldProvider.proofSetIds; + let nextIds: BigInt[] = []; + if (ids) { + for (let i = 0; i < ids.length; i++) { + if (ids[i] != setId) { + nextIds.push(ids[i]); + } + } + } + oldProvider.proofSetIds = nextIds; + oldProvider.totalDataSize = oldProvider.totalDataSize.minus( + proofSet.totalDataSize + ); + oldProvider.updatedAt = event.block.timestamp; + oldProvider.blockNumber = event.block.number; + oldProvider.save(); + } + + const newProvider = Provider.load(event.params.newOwner); + if (newProvider) { + const ids = newProvider.proofSetIds; + newProvider.proofSetIds = ids ? ids.concat([setId]) : [setId]; + newProvider.totalDataSize = newProvider.totalDataSize.plus( + proofSet.totalDataSize + ); + newProvider.updatedAt = event.block.timestamp; + newProvider.blockNumber = event.block.number; + newProvider.save(); + } else { + const newProvider = new Provider(event.params.newOwner); + newProvider.address = event.params.newOwner; + newProvider.totalFaultedPeriods = BigInt.fromI32(0); + newProvider.totalDataSize = proofSet.totalDataSize; + newProvider.proofSetIds = [setId]; + newProvider.blockNumber = event.block.number; + newProvider.createdAt = event.block.timestamp; + newProvider.updatedAt = event.block.timestamp; + newProvider.save(); + } +} + +export function handleProofFeePaid(event: ProofFeePaidEvent): void { + const setId = event.params.setId; + const fee = event.params.fee; + const price = event.params.price; + const expo = event.params.expo; + + // 1. Create Event Log + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; + eventLog.address = event.address; + eventLog.name = "ProofFeePaid"; + eventLog.data = + `{setId:${setId.toString()}, ` + + `fee:${fee.toString()}, ` + + `price:${price.toString()}, ` + + `expo:${expo.toString()}}`; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.save(); + + // 2. Create Proof Fee record + // Use tx hash + log index as unique ID for the fee payment event + const proofFeeId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const proofFee = new ProofFee(proofFeeId); + proofFee.setId = event.params.setId; + proofFee.proofFee = event.params.fee; + proofFee.filUsdPrice = event.params.price; + proofFee.filUsdPriceExponent = BigInt.fromI32(event.params.expo); + proofFee.createdAt = event.block.timestamp; + proofFee.blockNumber = event.block.number; + proofFee.save(); + + // 3. Update Proof Set + const proofSetId = Bytes.fromBigInt(event.params.setId); + const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetId)); + if (proofSet) { + proofSet.totalFeePaid = proofSet.totalFeePaid.plus(event.params.fee); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + } +} + +export function handleProofSetEmpty(event: ProofSetEmptyEvent): void { + const setId = event.params.setId; + + // 1. Create Event Log + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; + eventLog.address = event.address; + eventLog.name = "ProofSetEmpty"; + eventLog.data = `{setId:${setId.toString()}}`; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.save(); + + // 2. Update Proof Set + const proofSetId = Bytes.fromBigInt(setId); + const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetId)); + if (proofSet) { + proofSet.totalRoots = BigInt.fromI32(0); + proofSet.totalDataSize = BigInt.fromI32(0); + proofSet.lastProvenEpoch = BigInt.fromI32(0); + proofSet.nextChallengeEpoch = BigInt.fromI32(0); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + } +} + +export function handlePossessionProven(event: PossessionProvenEvent): void { + const setId = event.params.setId; + const challenges = event.params.challenges; // Array of { rootId: BigInt, offset: BigInt } + const proofSetIdBytes = Bytes.fromBigInt(setId); // Get ProofSet ID early + + // 1. Create Event Log + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; + eventLog.address = event.address; + eventLog.name = "PossessionProven"; + // Store challenges as a simple string representation for the log + let challengesStr = "["; + for (let i = 0; i < challenges.length; i++) { + challengesStr += `{rootId:${challenges[i].rootId.toString()}, offset:${challenges[ + i + ].offset.toString()}}`; + if (i < challenges.length - 1) { + challengesStr += ","; + } + } + challengesStr += "]"; + eventLog.data = `{setId:${setId.toString()}, challenges:${challengesStr}}`; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.save(); + + const uniqueRootIds = new Set(); + // const proofSetIdBytes = Bytes.fromBigInt(setId); <= Moved up + + // 2. Process Challenges & Create Simplified Proof Entities + for (let i = 0; i < challenges.length; i++) { + const challenge = challenges[i]; + const rootId = challenge.rootId; + const offset = challenge.offset; + + // Create a unique ID for the proof instance within this event + const proofId = event.transaction.hash + .concatI32(event.logIndex.toI32()) + .concatI32(i); + + const proof = new Proof(proofId); + proof.setId = setId; // Reverting to assign Bytes ID - this is standard practice + proof.rootId = rootId; + proof.proofOffset = offset; + proof.provenAt = event.block.timestamp; + proof.blockNumber = event.block.number; + proof.save(); + + // Track unique root IDs processed in this event + const rootIdString = rootId.toString(); + uniqueRootIds.add(rootIdString); + + // 3. Update Root Statistics + // Construct Root entity ID (assuming format: set_id + root_id) + const rootEntityId = proofSetIdBytes.concatI32(rootId.toI32()); // Adjust if ID format is different + let root = Root.load(Bytes.fromByteArray(rootEntityId)); + if (root) { + root.totalProofsSubmitted = root.totalProofsSubmitted.plus( + BigInt.fromI32(1) + ); + root.lastProvenEpoch = event.block.number; + root.lastProvenAt = event.block.timestamp; + root.updatedAt = event.block.timestamp; + root.blockNumber = event.block.number; + root.save(); + } else { + // Should ideally not happen if RootsAdded is processed first, but log a warning + log.warning( + "Root entity not found for setId {} and rootId {} in handlePossessionProven. Tx: {}", + [setId.toString(), rootId.toString(), event.transaction.hash.toHex()] + ); + } + } + + // 4. Update ProofSet Statistics + const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetIdBytes)); + if (proofSet) { + // Increment by the number of *unique* roots proven in this event + // FIXME: Uncomment and adjust field name if 'totalProvedRoots' exists in schema + proofSet.totalProvedRoots = proofSet.totalProvedRoots.plus( + BigInt.fromI32(uniqueRootIds.size) + ); + proofSet.lastProvenEpoch = event.block.number; // Update last proven epoch for the set + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + } else { + log.error( + "ProofSet not found for setId {} in handlePossessionProven. Tx: {}", + [setId.toString(), event.transaction.hash.toHex()] + ); + } +} + +export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { + const setId = event.params.setId; + const nextChallengeEpoch = event.params.challengeEpoch; + const leafCount = event.params.leafCount; // Extracted, but not stored on ProofSet currently + const proofSetId = Bytes.fromBigInt(setId); // Get Bytes ID for linking/loading + + // 1. Create Event Log + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; // Reverting: Assign ProofSet ID hex string to 'set' field (matches current codegen, but likely needs schema fix) + eventLog.name = "NextProvingPeriod"; + eventLog.address = event.address; + eventLog.logIndex = event.logIndex; + eventLog.blockNumber = event.block.number; + eventLog.createdAt = event.block.timestamp; // Corrected: Use 'createdAt' field + eventLog.transactionHash = event.transaction.hash; + + // Store specific event parameters as JSON string + eventLog.data = `{ "setId": "${setId.toString()}", "nextChallengeEpoch": "${nextChallengeEpoch.toString()}", "leafCount": "${leafCount.toString()}" }`; // Corrected: Manual JSON string + + eventLog.save(); + + // 2. Update Proof Set + const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetId)); + + if (proofSet) { + proofSet.nextChallengeEpoch = nextChallengeEpoch; + proofSet.challengeRange = leafCount; + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + } else { + log.error( + "ProofSet not found for setId {} in handleNextProvingPeriod. Tx: {}", + [setId.toString(), event.transaction.hash.toHex()] + ); + } +} + +// Helper function to read Uint256 from Bytes at a specific offset +function readUint256(data: Bytes, offset: i32): BigInt { + // Ensure offset is valid and there's enough data + if (offset < 0 || data.length < offset + 32) { + log.error("readUint256: Invalid offset {} or data length {}", [ + offset.toString(), + data.length.toString(), + ]); + // Return zero or throw? Returning zero might hide issues but prevent crashes. + return BigInt.zero(); + } + // Ethereum stores values in big-endian format. + // BigInt.fromUnsignedBytes expects little-endian, so we reverse the bytes. + const slicedData = Bytes.fromUint8Array(data.slice(offset, offset + 32)); + // Check if the sliced data is exactly 32 bytes before reversing + if (slicedData.length != 32) { + log.error("readUint256: Sliced data not 32 bytes. Offset: {}, Len: {}", [ + offset.toString(), + slicedData.length.toString(), + ]); + return BigInt.zero(); + } + return BigInt.fromUnsignedBytes(Bytes.fromUint8Array(slicedData.reverse())); +} + +// Helper function to read Bytes (dynamic type) from Bytes at a specific offset +function readBytes(data: Bytes, offset: i32): Bytes { + // Ensure offset is valid + if (offset < 0 || data.length < offset + 32) { + log.error( + "readBytes: Invalid offset {} or data length {} for reading data offset", + [offset.toString(), data.length.toString()] + ); + return Bytes.empty(); + } + const dataOffset = readUint256(data, offset).toI32(); + + // Ensure dataOffset is valid + if (dataOffset < 0 || data.length < dataOffset + 32) { + log.error( + "readBytes: Invalid dataOffset {} or data length {} for reading length", + [dataOffset.toString(), data.length.toString()] + ); + return Bytes.empty(); + } + const length = readUint256(data, dataOffset).toI32(); + + // Ensure length is non-negative + if (length < 0) { + log.error("readBytes: Invalid negative length {} at dataOffset {}", [ + length.toString(), + dataOffset.toString(), + ]); + return Bytes.empty(); + } + + const dataStart = dataOffset + 32; + + // Refined bounds check to avoid problematic casting + // 1. dataStart must be non-negative. + // 2. dataStart must be less than data.length to be a valid start index. + // 3. The remaining length (data.length - dataStart) must be >= the required length. + if ( + dataStart < 0 || + dataStart >= data.length || + length > data.length - dataStart + ) { + log.error( + "readBytes: Data slice out of bounds. Start: {}, Length: {}, Data Length: {}", + [dataStart.toString(), length.toString(), data.length.toString()] + ); + // If start is valid but length overflows, slice to the end + if (dataStart >= 0 && dataStart < data.length) { + return Bytes.fromUint8Array(data.slice(dataStart)); + } else { + // If start itself is invalid, return empty + return Bytes.empty(); + } + } + + return Bytes.fromUint8Array(data.slice(dataStart, dataStart + length)); +} + +export function handleRootsAdded(event: RootsAddedEvent): void { + const setId = event.params.setId; // We can still get setId from params for convenience + const rootIdsFromEvent = event.params.rootIds; // Array of BigInt from event logs + const proofSetIdBytes = Bytes.fromBigInt(setId); + + const txInput = event.transaction.input; + + // --- 1. Create Event Log --- + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; + eventLog.name = "RootsAdded"; + eventLog.address = event.address; + eventLog.logIndex = event.logIndex; + eventLog.blockNumber = event.block.number; + eventLog.createdAt = event.block.timestamp; + eventLog.transactionHash = event.transaction.hash; + // Store simple representation of event params + let rootIdStrings: string[] = []; + for (let i = 0; i < rootIdsFromEvent.length; i++) { + rootIdStrings.push(rootIdsFromEvent[i].toString()); + } + eventLog.data = `{ "setId": "${setId.toString()}", "rootIds": [${rootIdStrings.join(",")}] }`; + eventLog.save(); + + // --- 2. Parse Transaction Input --- + if (txInput.length < 4) { + log.error("Invalid tx input length in handleRootsAdded: {}", [ + event.transaction.hash.toHex(), + ]); + return; + } + // Skip function selector (first 4 bytes) + const encodedData = Bytes.fromUint8Array(txInput.slice(4)); + + let decodedSetId: BigInt; + let rootsDataOffset: i32; + let rootsDataLength: i32; + + let totalDataSizeAdded = BigInt.zero(); + let parsedRootDetails: ParsedRootDetail[] = []; + + // Need at least 3 * 32 bytes for setId, offset to rootsData, offset to extraData + if (encodedData.length < 96) { + log.error( + "handleRootsAdded: Encoded data too short for basic structure. Len: {}. Tx: {}", + [encodedData.length.toString(), event.transaction.hash.toHex()] + ); + return; + } + + // Decode setId (uint256 at offset 0) + decodedSetId = readUint256(encodedData, 0); + if (decodedSetId != setId) { + log.warning( + "Decoded setId {} does not match event param {} in handleRootsAdded. Tx: {}", + [ + decodedSetId.toString(), + setId.toString(), + event.transaction.hash.toHex(), + ] + ); + // Continue using setId from event params as it's usually more reliable + } + + // Decode rootsData (tuple[]) + rootsDataOffset = readUint256(encodedData, 32).toI32(); // Offset is at byte 32 + + if (rootsDataOffset < 0 || encodedData.length < rootsDataOffset + 32) { + log.error( + "handleRootsAdded: Invalid rootsDataOffset {} or data length {} for reading rootsData length. Tx: {}", + [ + rootsDataOffset.toString(), + encodedData.length.toString(), + event.transaction.hash.toHex(), + ] + ); + return; + } + + rootsDataLength = readUint256(encodedData, rootsDataOffset).toI32(); // Length is at the offset + + if (rootsDataLength < 0) { + log.error("handleRootsAdded: Invalid negative rootsDataLength {}. Tx: {}", [ + rootsDataLength.toString(), + event.transaction.hash.toHex(), + ]); + return; + } + + const structsBaseOffset = rootsDataOffset + 32; // Start of struct offsets/data + + // Check for potential overflow before calculating required length + // Required length calculation needs care for potential overflow if rootsDataLength is huge + // Let's check if structsBaseOffset itself is valid first + if (structsBaseOffset < 0 || structsBaseOffset > encodedData.length) { + log.error("handleRootsAdded: Invalid structsBaseOffset {}. Tx: {}", [ + structsBaseOffset.toString(), + event.transaction.hash.toHex(), + ]); + return; + } + // Check if enough space exists for all offsets + const requiredLengthForOffsets = rootsDataLength * 32; + if (rootsDataLength > 0 && requiredLengthForOffsets / rootsDataLength != 32) { + // Check for multiplication overflow + log.error( + "handleRootsAdded: Potential overflow calculating required length for offsets. Count: {}. Tx: {}", + [rootsDataLength.toString(), event.transaction.hash.toHex()] + ); + return; + } + if (encodedData.length - structsBaseOffset < requiredLengthForOffsets) { + log.error( + "handleRootsAdded: Encoded data too short for root struct offsets. Base: {}, Required: {}, Available: {}. Tx: {}", + [ + structsBaseOffset.toString(), + requiredLengthForOffsets.toString(), + (encodedData.length - structsBaseOffset).toString(), + event.transaction.hash.toHex(), + ] + ); + return; // Cannot read all struct offsets + } + + // Iterate through the array elements + for (let i = 0; i < rootsDataLength; i++) { + const structDataRelOffset = readUint256( + encodedData, + structsBaseOffset + i * 32 + ).toI32(); + const structDataAbsOffset = rootsDataOffset + structDataRelOffset; // Absolute offset from start of encodedData (after selector) + + // Decode struct { root: tuple { bytes }, rawSize: uint256 } + if ( + structDataAbsOffset < 0 || + encodedData.length < structDataAbsOffset + 64 + ) { + // Need 32 for root offset + 32 for rawSize + log.error( + "handleRootsAdded: Encoded data too short or invalid offset for root struct content. Struct Index: {}, Abs Offset: {}, Len: {}. Tx: {}", + [ + i.toString(), + structDataAbsOffset.toString(), + encodedData.length.toString(), + event.transaction.hash.toHex(), + ] + ); + continue; // Skip this root if data is too short or offset invalid + } + + // Decode root tuple (bytes offset is at structDataAbsOffset + 0) + const rootBytes = readBytes(encodedData, structDataAbsOffset); // readBytes handles inner offset/length + + // Decode rawSize (uint256 at structDataAbsOffset + 32) + const rawSize = readUint256(encodedData, structDataAbsOffset + 32); + + // Get corresponding rootId from event params (assuming order matches) + if (i >= rootIdsFromEvent.length) { + log.error( + "handleRootsAdded: Mismatch between decoded roots ({}) and event roots ({}). Tx: {}", + [ + rootsDataLength.toString(), + rootIdsFromEvent.length.toString(), + event.transaction.hash.toHex(), + ] + ); + break; // Stop processing if lengths mismatch + } + const rootId = rootIdsFromEvent[i]; + + parsedRootDetails.push({ rootId, rawSize, rootBytes }); + totalDataSizeAdded = totalDataSizeAdded.plus(rawSize); + } + + // Verify lengths match + if (parsedRootDetails.length != rootIdsFromEvent.length) { + log.error( + "handleRootsAdded: Final count mismatch after parsing. Decoded: {}, Event: {}. Tx: {}", + [ + parsedRootDetails.length.toString(), + rootIdsFromEvent.length.toString(), + event.transaction.hash.toHex(), + ] + ); + // Decide how to handle mismatch. For now, log and continue with parsed details. + } + + // --- 3. Create/Update Root Entities --- + for (let i = 0; i < parsedRootDetails.length; i++) { + const detail = parsedRootDetails[i]; + const rootId = detail.rootId; + const rawSize = detail.rawSize; + const rootBytes = detail.rootBytes; + + const rootEntityId = proofSetIdBytes.concatI32(rootId.toI32()); + let root = Root.load(Bytes.fromByteArray(rootEntityId)); + + if (root == null) { + root = new Root(Bytes.fromByteArray(rootEntityId)); + root.setId = setId; + root.rootId = rootId; + root.createdAt = event.block.timestamp; + root.blockNumber = event.block.number; + root.totalProofsSubmitted = BigInt.zero(); + root.totalPeriodsFaulted = BigInt.zero(); + root.lastProvenEpoch = BigInt.zero(); + root.lastProvenAt = BigInt.zero(); + root.lastFaultedEpoch = BigInt.zero(); + root.lastFaultedAt = BigInt.zero(); + } + + root.rawSize = rawSize; + // Store hex representation of root bytes as CID for now + root.cid = rootBytes.length > 0 ? rootBytes.toHex() : ""; // Use hex or empty string + root.updatedAt = event.block.timestamp; + root.removed = false; + root.save(); + } + + // --- 4. Update Proof Set Statistics --- + const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetIdBytes)); + if (proofSet) { + proofSet.totalRoots = proofSet.totalRoots.plus( + BigInt.fromI32(parsedRootDetails.length) // Use count of successfully parsed roots + ); + proofSet.totalDataSize = proofSet.totalDataSize.plus(totalDataSizeAdded); // Add parsed size + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + } else { + log.error("ProofSet not found for setId {} in handleRootsAdded. Tx: {}", [ + setId.toString(), + event.transaction.hash.toHex(), + ]); + } + + // --- 5. Update Provider Statistics --- + const providerAddress = event.transaction.from; + let provider = Provider.load(providerAddress); + if (provider == null) { + provider = new Provider(providerAddress); + provider.address = providerAddress; + provider.totalDataSize = BigInt.zero(); // Initialize + provider.totalFaultedPeriods = BigInt.zero(); + provider.createdAt = event.block.timestamp; + provider.blockNumber = event.block.number; + } + provider.totalDataSize = provider.totalDataSize.plus(totalDataSizeAdded); + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; // Update block number on activity + provider.save(); +} + +export function handleRootsRemoved(event: RootsRemovedEvent): void { + const setId = event.params.setId; + const rootIds = event.params.rootIds; // Array of BigInt + const proofSetIdBytes = Bytes.fromBigInt(setId); + + // 1. Create Event Log + const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); + const eventLog = new EventLog(eventId); + eventLog.setId = setId; + eventLog.name = "RootsRemoved"; + eventLog.address = event.address; + eventLog.logIndex = event.logIndex; + eventLog.blockNumber = event.block.number; + eventLog.createdAt = event.block.timestamp; + eventLog.transactionHash = event.transaction.hash; + + // Store rootIds array as a simple string in data field + let rootIdStrings: string[] = []; + for (let i = 0; i < rootIds.length; i++) { + rootIdStrings.push(rootIds[i].toString()); + } + eventLog.data = `{ "setId": "${setId.toString()}", "rootIds": [${rootIdStrings.join(",")}] }`; + eventLog.save(); + + // 2. Process Root Removals + let totalDataSizeRemoved = BigInt.zero(); + let removedCount = 0; + + for (let i = 0; i < rootIds.length; i++) { + const rootId = rootIds[i]; + const rootEntityId = proofSetIdBytes.concatI32(rootId.toI32()); + const rootEntityIdStr = Bytes.fromByteArray(rootEntityId).toHex(); // store.remove needs string ID + + const root = Root.load(Bytes.fromByteArray(rootEntityId)); + + if (root != null) { + totalDataSizeRemoved = totalDataSizeRemoved.plus(root.rawSize); + root.removed = true; + root.updatedAt = event.block.timestamp; + root.blockNumber = event.block.number; + root.save(); + removedCount++; + } else { + log.warning( + "Root entity with id {} not found for removal in handleRootsRemoved. SetId: {}, Tx: {}", + [rootEntityIdStr, setId.toString(), event.transaction.hash.toHex()] + ); + } + } + + // 3. Update Proof Set Statistics + const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetIdBytes)); + if (proofSet) { + proofSet.totalRoots = proofSet.totalRoots.minus( + BigInt.fromI32(removedCount) + ); + // Ensure totalRoots doesn't go negative (though theoretically shouldn't happen if logic is correct) + if (proofSet.totalRoots.lt(BigInt.zero())) { + log.warning( + "ProofSet {} totalRoots went negative after removal. Resetting to 0. Tx: {}", + [proofSetIdBytes.toHex(), event.transaction.hash.toHex()] + ); + proofSet.totalRoots = BigInt.zero(); + } + + proofSet.totalDataSize = proofSet.totalDataSize.minus(totalDataSizeRemoved); + // Ensure totalDataSize doesn't go negative + if (proofSet.totalDataSize.lt(BigInt.zero())) { + log.warning( + "ProofSet {} totalDataSize went negative after removal. Resetting to 0. Tx: {}", + [proofSetIdBytes.toHex(), event.transaction.hash.toHex()] + ); + proofSet.totalDataSize = BigInt.zero(); + } + + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + } else { + // This case is less likely if roots existed, but possible in edge cases/reorgs + log.error("ProofSet not found for setId {} in handleRootsRemoved. Tx: {}", [ + setId.toString(), + event.transaction.hash.toHex(), + ]); + } + + // 4. Update Provider Statistics + const providerAddress = event.transaction.from; + const provider = Provider.load(providerAddress); + if (provider) { + provider.totalDataSize = provider.totalDataSize.minus(totalDataSizeRemoved); + // Ensure totalDataSize doesn't go negative + if (provider.totalDataSize.lt(BigInt.zero())) { + log.warning( + "Provider {} totalDataSize went negative after removal. Resetting to 0. Tx: {}", + [providerAddress.toHex(), event.transaction.hash.toHex()] + ); + provider.totalDataSize = BigInt.zero(); + } + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); + } + // If provider doesn't exist, we don't need to do anything (can't subtract size) +} diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml new file mode 100644 index 0000000..5c1e765 --- /dev/null +++ b/subgraph/subgraph.yaml @@ -0,0 +1,72 @@ +specVersion: 1.3.0 +indexerHints: + prune: auto +schema: + file: ./schema.graphql +dataSources: + - kind: ethereum + name: PDPVerifier + network: filecoin + source: + address: "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6" + abi: PDPVerifier + startBlock: 4853581 + mapping: + kind: ethereum/events + apiVersion: 0.0.9 + language: wasm/assemblyscript + entities: + - ProofSet + - Provider + - Root + - EventLog + - Transaction + - Proof + - ProofFee + - FaultRecord + abis: + - name: PDPVerifier + file: ./abis/PDPVerifier.json + eventHandlers: + - event: ProofSetCreated(indexed uint256,indexed address) + handler: handleProofSetCreated + - event: ProofSetOwnerChanged(indexed uint256,indexed address,indexed address) + handler: handleProofSetOwnerChanged + - event: ProofSetDeleted(indexed uint256,uint256) + handler: handleProofSetDeleted + - event: RootsAdded(indexed uint256,uint256[]) + handler: handleRootsAdded + - event: RootsRemoved(indexed uint256,uint256[]) + handler: handleRootsRemoved + - event: ProofFeePaid(indexed uint256,uint256,uint64,int32) + handler: handleProofFeePaid + - event: ProofSetEmpty(indexed uint256) + handler: handleProofSetEmpty + - event: PossessionProven(indexed uint256,(uint256,uint256)[]) + handler: handlePossessionProven + - event: NextProvingPeriod(indexed uint256,uint256,uint256) + handler: handleNextProvingPeriod + file: ./src/pdp-verifier.ts + - kind: ethereum + name: PDPService + network: filecoin + source: + address: "0x805370387fA5Bd8053FD8f7B2da4055B9a4f8019" + abi: PDPService + startBlock: 4853585 + mapping: + kind: ethereum/events + apiVersion: 0.0.9 + language: wasm/assemblyscript + entities: + - ProofSet + - Root + - EventLog + - FaultRecord + abis: + - name: PDPService + file: ./abis/PDPService.json + eventHandlers: + - event: "FaultRecord(indexed uint256,uint256,uint256)" + handler: handleFaultRecord + file: ./src/pdp-service.ts diff --git a/subgraph/tests/pdp-verifier-utils.ts b/subgraph/tests/pdp-verifier-utils.ts new file mode 100644 index 0000000..835c9ad --- /dev/null +++ b/subgraph/tests/pdp-verifier-utils.ts @@ -0,0 +1,183 @@ +import { newMockEvent } from "matchstick-as" +import { ethereum, BigInt, Address } from "@graphprotocol/graph-ts" +import { + Issue, + Redeem, + Deprecate, + Params, + DestroyedBlackFunds, + AddedBlackList, + RemovedBlackList, + Approval, + Transfer, + Pause, + Unpause +} from "../generated/PDPVerifier/PDPVerifier" + +export function createIssueEvent(amount: BigInt): Issue { + let issueEvent = changetype(newMockEvent()) + + issueEvent.parameters = new Array() + + issueEvent.parameters.push( + new ethereum.EventParam("amount", ethereum.Value.fromUnsignedBigInt(amount)) + ) + + return issueEvent +} + +export function createRedeemEvent(amount: BigInt): Redeem { + let redeemEvent = changetype(newMockEvent()) + + redeemEvent.parameters = new Array() + + redeemEvent.parameters.push( + new ethereum.EventParam("amount", ethereum.Value.fromUnsignedBigInt(amount)) + ) + + return redeemEvent +} + +export function createDeprecateEvent(newAddress: Address): Deprecate { + let deprecateEvent = changetype(newMockEvent()) + + deprecateEvent.parameters = new Array() + + deprecateEvent.parameters.push( + new ethereum.EventParam( + "newAddress", + ethereum.Value.fromAddress(newAddress) + ) + ) + + return deprecateEvent +} + +export function createParamsEvent( + feeBasisPoints: BigInt, + maxFee: BigInt +): Params { + let paramsEvent = changetype(newMockEvent()) + + paramsEvent.parameters = new Array() + + paramsEvent.parameters.push( + new ethereum.EventParam( + "feeBasisPoints", + ethereum.Value.fromUnsignedBigInt(feeBasisPoints) + ) + ) + paramsEvent.parameters.push( + new ethereum.EventParam("maxFee", ethereum.Value.fromUnsignedBigInt(maxFee)) + ) + + return paramsEvent +} + +export function createDestroyedBlackFundsEvent( + _blackListedUser: Address, + _balance: BigInt +): DestroyedBlackFunds { + let destroyedBlackFundsEvent = changetype(newMockEvent()) + + destroyedBlackFundsEvent.parameters = new Array() + + destroyedBlackFundsEvent.parameters.push( + new ethereum.EventParam( + "_blackListedUser", + ethereum.Value.fromAddress(_blackListedUser) + ) + ) + destroyedBlackFundsEvent.parameters.push( + new ethereum.EventParam( + "_balance", + ethereum.Value.fromUnsignedBigInt(_balance) + ) + ) + + return destroyedBlackFundsEvent +} + +export function createAddedBlackListEvent(_user: Address): AddedBlackList { + let addedBlackListEvent = changetype(newMockEvent()) + + addedBlackListEvent.parameters = new Array() + + addedBlackListEvent.parameters.push( + new ethereum.EventParam("_user", ethereum.Value.fromAddress(_user)) + ) + + return addedBlackListEvent +} + +export function createRemovedBlackListEvent(_user: Address): RemovedBlackList { + let removedBlackListEvent = changetype(newMockEvent()) + + removedBlackListEvent.parameters = new Array() + + removedBlackListEvent.parameters.push( + new ethereum.EventParam("_user", ethereum.Value.fromAddress(_user)) + ) + + return removedBlackListEvent +} + +export function createApprovalEvent( + owner: Address, + spender: Address, + value: BigInt +): Approval { + let approvalEvent = changetype(newMockEvent()) + + approvalEvent.parameters = new Array() + + approvalEvent.parameters.push( + new ethereum.EventParam("owner", ethereum.Value.fromAddress(owner)) + ) + approvalEvent.parameters.push( + new ethereum.EventParam("spender", ethereum.Value.fromAddress(spender)) + ) + approvalEvent.parameters.push( + new ethereum.EventParam("value", ethereum.Value.fromUnsignedBigInt(value)) + ) + + return approvalEvent +} + +export function createTransferEvent( + from: Address, + to: Address, + value: BigInt +): Transfer { + let transferEvent = changetype(newMockEvent()) + + transferEvent.parameters = new Array() + + transferEvent.parameters.push( + new ethereum.EventParam("from", ethereum.Value.fromAddress(from)) + ) + transferEvent.parameters.push( + new ethereum.EventParam("to", ethereum.Value.fromAddress(to)) + ) + transferEvent.parameters.push( + new ethereum.EventParam("value", ethereum.Value.fromUnsignedBigInt(value)) + ) + + return transferEvent +} + +export function createPauseEvent(): Pause { + let pauseEvent = changetype(newMockEvent()) + + pauseEvent.parameters = new Array() + + return pauseEvent +} + +export function createUnpauseEvent(): Unpause { + let unpauseEvent = changetype(newMockEvent()) + + unpauseEvent.parameters = new Array() + + return unpauseEvent +} diff --git a/subgraph/tests/pdp-verifier.test.ts b/subgraph/tests/pdp-verifier.test.ts new file mode 100644 index 0000000..4234019 --- /dev/null +++ b/subgraph/tests/pdp-verifier.test.ts @@ -0,0 +1,46 @@ +import { + assert, + describe, + test, + clearStore, + beforeAll, + afterAll +} from "matchstick-as/assembly/index" +import { BigInt, Address } from "@graphprotocol/graph-ts" +import { Issue } from "../generated/schema" +import { Issue as IssueEvent } from "../generated/PDPVerifier/PDPVerifier" +import { handleIssue } from "../src/pdp-verifier" +import { createIssueEvent } from "./pdp-verifier-utils" + +// Tests structure (matchstick-as >=0.5.0) +// https://thegraph.com/docs/en/developer/matchstick/#tests-structure-0-5-0 + +describe("Describe entity assertions", () => { + beforeAll(() => { + let amount = BigInt.fromI32(234) + let newIssueEvent = createIssueEvent(amount) + handleIssue(newIssueEvent) + }) + + afterAll(() => { + clearStore() + }) + + // For more test scenarios, see: + // https://thegraph.com/docs/en/developer/matchstick/#write-a-unit-test + + test("Issue created and stored", () => { + assert.entityCount("Issue", 1) + + // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function + assert.fieldEquals( + "Issue", + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", + "amount", + "234" + ) + + // More assert options: + // https://thegraph.com/docs/en/developer/matchstick/#asserts + }) +}) diff --git a/subgraph/tsconfig.json b/subgraph/tsconfig.json new file mode 100644 index 0000000..4e86672 --- /dev/null +++ b/subgraph/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@graphprotocol/graph-ts/types/tsconfig.base.json", + "include": ["src", "tests"] +} diff --git a/subgraph/utils/index.ts b/subgraph/utils/index.ts new file mode 100644 index 0000000..65d7eb1 --- /dev/null +++ b/subgraph/utils/index.ts @@ -0,0 +1,5 @@ +export const PDPVerifierAddress = "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6"; + +export const NumChallenges = 5; + +export const LeafSize = 32; diff --git a/subgraph/yarn.lock b/subgraph/yarn.lock new file mode 100644 index 0000000..9db47b0 --- /dev/null +++ b/subgraph/yarn.lock @@ -0,0 +1,2935 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@chainsafe/is-ip@^2.0.1": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@chainsafe/is-ip/-/is-ip-2.1.0.tgz#ba9ac32acd9027698e0b56b91c7af069d28d7931" + integrity sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w== + +"@chainsafe/netmask@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@chainsafe/netmask/-/netmask-2.0.0.tgz#0d4a75f47919f65011da4327a3845c9661f1038a" + integrity sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg== + dependencies: + "@chainsafe/is-ip" "^2.0.1" + +"@float-capital/float-subgraph-uncrashable@0.0.0-internal-testing.5": + version "0.0.0-internal-testing.5" + resolved "https://registry.yarnpkg.com/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz#060f98440f6e410812766c5b040952d2d02e2b73" + integrity sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA== + dependencies: + "@rescript/std" "9.0.0" + graphql "^16.6.0" + graphql-import-node "^0.0.5" + js-yaml "^4.1.0" + +"@graphprotocol/graph-cli@0.97.0": + version "0.97.0" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-cli/-/graph-cli-0.97.0.tgz#9dc4eaf542f7535ee773cc9834bdf3993b9934ca" + integrity sha512-SvijthiWbQEL3HdRDf2ydc4uAUwWJfTKyiXKXkXTtimk/hXNgzf4DuqxZPVQOOq4yx5U18iOCc/TKkTI7xCNjw== + dependencies: + "@float-capital/float-subgraph-uncrashable" "0.0.0-internal-testing.5" + "@oclif/core" "4.2.8" + "@oclif/plugin-autocomplete" "^3.2.11" + "@oclif/plugin-not-found" "^3.2.29" + "@oclif/plugin-warn-if-update-available" "^3.1.24" + "@pinax/graph-networks-registry" "^0.6.5" + "@whatwg-node/fetch" "^0.10.1" + assemblyscript "0.19.23" + chokidar "4.0.3" + debug "4.4.0" + docker-compose "1.1.1" + fs-extra "11.3.0" + glob "11.0.1" + gluegun "5.2.0" + graphql "16.10.0" + immutable "5.0.3" + jayson "4.1.3" + js-yaml "4.1.0" + kubo-rpc-client "^5.0.2" + open "10.1.0" + prettier "3.5.3" + semver "7.7.1" + tmp-promise "3.0.3" + undici "7.4.0" + web3-eth-abi "4.4.1" + yaml "2.7.0" + +"@graphprotocol/graph-ts@0.37.0": + version "0.37.0" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-ts/-/graph-ts-0.37.0.tgz#ad5e9bc24a099db336e6488e37d5bd5283501a39" + integrity sha512-3xp/sO8zFDBkX44ydGB87ow5Cyrfr/SAm/cWzIRzUVL7ROw0KUyFBG1xj4KKlMnAod7/RL99zChYquC15H4Oqg== + dependencies: + assemblyscript "0.27.31" + +"@inquirer/checkbox@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.5.tgz#891bb32ca98eb6ee2889f71d79722705e2241161" + integrity sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^5.1.9": + version "5.1.9" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.9.tgz#c858b6a3decb458241ec36ca9a9117477338076a" + integrity sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + +"@inquirer/core@^10.1.10": + version "10.1.10" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.10.tgz#222a374e3768536a1eb0adf7516c436d5f4a291d" + integrity sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw== + dependencies: + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^4.2.10": + version "4.2.10" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.10.tgz#45e399313ee857857248bd539b8e832aa0fb60b3" + integrity sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + external-editor "^3.1.0" + +"@inquirer/expand@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.12.tgz#1e4554f509a435f966e2b91395a503d77df35c17" + integrity sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.11": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.11.tgz#4744e6db95288fea1dead779554859710a959a21" + integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== + +"@inquirer/input@^4.1.9": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.9.tgz#e93888d48c89bdb7f8e10bdd94572b636375749a" + integrity sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + +"@inquirer/number@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.12.tgz#e027d27425ee2a81a7ccb9fdc750129edd291067" + integrity sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + +"@inquirer/password@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.12.tgz#f1a663bc5cf88699643cf6c83626a1ae77e580b5" + integrity sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.4.1.tgz#b9bfbba7384305f1d632aca1b800b2b3c22fbcbf" + integrity sha512-UlmM5FVOZF0gpoe1PT/jN4vk8JmpIWBlMvTL8M+hlvPmzN89K6z03+IFmyeu/oFCenwdwHDr2gky7nIGSEVvlA== + dependencies: + "@inquirer/checkbox" "^4.1.5" + "@inquirer/confirm" "^5.1.9" + "@inquirer/editor" "^4.2.10" + "@inquirer/expand" "^4.0.12" + "@inquirer/input" "^4.1.9" + "@inquirer/number" "^3.0.12" + "@inquirer/password" "^4.0.12" + "@inquirer/rawlist" "^4.0.12" + "@inquirer/search" "^3.0.12" + "@inquirer/select" "^4.1.1" + +"@inquirer/rawlist@^4.0.12": + version "4.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.12.tgz#97b9540199590d2b197836ba3a5658addd406479" + integrity sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^3.0.12": + version "3.0.12" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.12.tgz#e86f91ea598ccb39caf9a17762b839a9b950e16d" + integrity sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.1.1.tgz#0496b913514149171cf6351f0acb6d4243a39fdf" + integrity sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.6.tgz#2500e435fc2014c5250eec3279f42b70b64089bd" + integrity sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA== + +"@ipld/dag-cbor@^9.0.0": + version "9.2.2" + resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-9.2.2.tgz#e6f5f5bd1e4f290f2285b51fc969ef806484603a" + integrity sha512-uIEOuruCqKTP50OBWwgz4Js2+LhiBQaxc57cnP71f45b1mHEAo1OCR1Zn/TbvSW/mV1x+JqhacIktkKyaYqhCw== + dependencies: + cborg "^4.0.0" + multiformats "^13.1.0" + +"@ipld/dag-json@^10.0.0": + version "10.2.3" + resolved "https://registry.yarnpkg.com/@ipld/dag-json/-/dag-json-10.2.3.tgz#bb9de2e869f1c523104c52adc89e1e8bb0db7253" + integrity sha512-itacv1j1hvYgLox2B42Msn70QLzcr0MEo5yGIENuw2SM/lQzq9bmBiMky+kDsIrsqqblKTXcHBZnnmK7D4a6ZQ== + dependencies: + cborg "^4.0.0" + multiformats "^13.1.0" + +"@ipld/dag-pb@^4.0.0": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@ipld/dag-pb/-/dag-pb-4.1.3.tgz#b572d7978fa548a3a9219f566a80884189261858" + integrity sha512-ueULCaaSCcD+dQga6nKiRr+RSeVgdiYiEPKVUu5iQMNYDN+9osd0KpR3UDd9uQQ+6RWuv9L34SchfEwj7YIbOA== + dependencies: + multiformats "^13.1.0" + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + +"@libp2p/crypto@^5.0.0", "@libp2p/crypto@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@libp2p/crypto/-/crypto-5.1.0.tgz#c12e170d30c9a25ec624a22c009a8efcae2473cf" + integrity sha512-hcmScz9m7Ae7R7b/w3x9DX+i60ZIUVsMmsHyIo0vSlGsxO0+tyM4UKUia5EpSp/i1SB/W1IFXxlURwpiX7R5eQ== + dependencies: + "@libp2p/interface" "^2.8.0" + "@noble/curves" "^1.7.0" + "@noble/hashes" "^1.6.1" + multiformats "^13.3.1" + protons-runtime "^5.5.0" + uint8arraylist "^2.4.8" + uint8arrays "^5.1.0" + +"@libp2p/interface@^2.0.0", "@libp2p/interface@^2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@libp2p/interface/-/interface-2.8.0.tgz#c09d97bb651763f48f59cc90af201ce68ca2b98e" + integrity sha512-QnIjqqUv2aDiBho6OGcNNhLT3Ac4RKrh41qoQmqG6csMRkUUx/xZMkfFJx3j0wGCIP8GS4sGspkTt4wCpPbSWw== + dependencies: + "@multiformats/multiaddr" "^12.3.3" + it-pushable "^3.2.3" + it-stream-types "^2.0.2" + multiformats "^13.3.1" + progress-events "^1.0.1" + uint8arraylist "^2.4.8" + +"@libp2p/logger@^5.0.0": + version "5.1.14" + resolved "https://registry.yarnpkg.com/@libp2p/logger/-/logger-5.1.14.tgz#30cf5382c2e43e81106d871897ea4e57981f334a" + integrity sha512-rJeEq7iuKMMjel0zzH10dXzcWn4Q2yywbv5vM9B1xTQpkD4uxTbBlQs+EL9+pmwaaQrrriEGqluZOTzHvUzJUg== + dependencies: + "@libp2p/interface" "^2.8.0" + "@multiformats/multiaddr" "^12.3.3" + interface-datastore "^8.3.1" + multiformats "^13.3.1" + weald "^1.0.4" + +"@libp2p/peer-id@^5.0.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@libp2p/peer-id/-/peer-id-5.1.1.tgz#19766e352fe9f494c24430c5bad5a3750687d61c" + integrity sha512-dVpgln2gWybglCC8hiQqyGlyXU7F7ovoOqwnnMs8HxurGEH9QxgmCfxRP4p8s86bQwl1MFbyj0AqYPy/zbKLrA== + dependencies: + "@libp2p/crypto" "^5.1.0" + "@libp2p/interface" "^2.8.0" + multiformats "^13.3.1" + uint8arrays "^5.1.0" + +"@multiformats/dns@^1.0.3": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@multiformats/dns/-/dns-1.0.6.tgz#b8c7de11459a02a5f4e609d35d3cdb95cb6ad152" + integrity sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw== + dependencies: + "@types/dns-packet" "^5.6.5" + buffer "^6.0.3" + dns-packet "^5.6.1" + hashlru "^2.3.0" + p-queue "^8.0.1" + progress-events "^1.0.0" + uint8arrays "^5.0.2" + +"@multiformats/multiaddr-to-uri@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.0.tgz#ec0ee9494f1cfc6ccd5173e61bbb0b6722029e97" + integrity sha512-9RNmlIGwZbBLsHekT50dbt4o4u8Iciw9kGjv+WHiGxQdsJ6xKKjU1+C0Vbas6RilMbaVOAOnEyfNcXbUmTkLxQ== + dependencies: + "@multiformats/multiaddr" "^12.3.0" + +"@multiformats/multiaddr@^12.2.1", "@multiformats/multiaddr@^12.3.0", "@multiformats/multiaddr@^12.3.3": + version "12.4.0" + resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-12.4.0.tgz#13fca8d68805fe0d0569bdd7d4dce41497503d31" + integrity sha512-FL7yBTLijJ5JkO044BGb2msf+uJLrwpD6jD6TkXlbjA9N12+18HT40jvd4o5vL4LOJMc86dPX6tGtk/uI9kYKg== + dependencies: + "@chainsafe/is-ip" "^2.0.1" + "@chainsafe/netmask" "^2.0.0" + "@multiformats/dns" "^1.0.3" + multiformats "^13.0.0" + uint8-varint "^2.0.1" + uint8arrays "^5.0.0" + +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/curves@^1.7.0": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" + integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== + dependencies: + "@noble/hashes" "1.7.1" + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + +"@noble/hashes@^1.6.1": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" + integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== + +"@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" + +"@oclif/core@4.2.8": + version "4.2.8" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.8.tgz#6e71c76b8ea91064ffc8390a3fd2502c5d32a3db" + integrity sha512-OWv4Va6bERxIhrYcnUGzyhGRqktc64lJO6cZ3UwkzJDpfR8ZrbCxRfKRBBah1i8kzUlOAeAXnpbMBMah3skKwA== + dependencies: + ansi-escapes "^4.3.2" + ansis "^3.16.0" + clean-stack "^3.0.1" + cli-spinners "^2.9.2" + debug "^4.4.0" + ejs "^3.1.10" + get-package-type "^0.1.0" + globby "^11.1.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + lilconfig "^3.1.3" + minimatch "^9.0.5" + semver "^7.6.3" + string-width "^4.2.3" + supports-color "^8" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" + +"@oclif/core@^4": + version "4.2.10" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.10.tgz#31dfb7481c79887c3e672e10c981fcc01fcbaeb3" + integrity sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ== + dependencies: + ansi-escapes "^4.3.2" + ansis "^3.17.0" + clean-stack "^3.0.1" + cli-spinners "^2.9.2" + debug "^4.4.0" + ejs "^3.1.10" + get-package-type "^0.1.0" + globby "^11.1.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + lilconfig "^3.1.3" + minimatch "^9.0.5" + semver "^7.6.3" + string-width "^4.2.3" + supports-color "^8" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" + +"@oclif/plugin-autocomplete@^3.2.11": + version "3.2.27" + resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.27.tgz#a3fee35507c651f2820aff3d7d975f09ec08aa07" + integrity sha512-Aywx0Vw36k0fQVBa2uLb8FKblGAP7ly1cQ5bdKqL4BmhJnUasy37tpyIDMUor93asOS+kKFQg+52pOxQgXHi1A== + dependencies: + "@oclif/core" "^4" + ansis "^3.16.0" + debug "^4.4.0" + ejs "^3.1.10" + +"@oclif/plugin-not-found@^3.2.29": + version "3.2.49" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-3.2.49.tgz#d083e0ff6d779137b665562011f1f3b5cd4b34c8" + integrity sha512-3V74/O5aFAqTTCJ7+X04M6vmt59Dk8HimB2uOlGgJrR7yLMW9JsVWKpDZZ6fl1hfd5kK9Jn4oaEt/1LuwfW1wQ== + dependencies: + "@inquirer/prompts" "^7.4.1" + "@oclif/core" "^4" + ansis "^3.17.0" + fast-levenshtein "^3.0.0" + +"@oclif/plugin-warn-if-update-available@^3.1.24": + version "3.1.38" + resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.38.tgz#331f9ed8d6e9e36919c0814b24c8c9adbfe2acc4" + integrity sha512-lwYtVXdQaBJV94DglPu140Bc6NmmysHhX5PZtdxeNcUG2BgSX/Sre7oCzMEgmuhe4Lu2jDviMxTX81a8wv6v1w== + dependencies: + "@oclif/core" "^4" + ansis "^3.17.0" + debug "^4.4.0" + http-call "^5.2.2" + lodash "^4.17.21" + registry-auth-token "^5.1.0" + +"@pinax/graph-networks-registry@^0.6.5": + version "0.6.7" + resolved "https://registry.yarnpkg.com/@pinax/graph-networks-registry/-/graph-networks-registry-0.6.7.tgz#ceb994f3b31e2943b9c9d9b09dd86eb00d067c0e" + integrity sha512-xogeCEZ50XRMxpBwE3TZjJ8RCO8Guv39gDRrrKtlpDEDEMLm0MzD3A0SQObgj7aF7qTZNRTWzsuvQdxgzw25wQ== + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + +"@rescript/std@9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@rescript/std/-/std-9.0.0.tgz#df53f3fa5911cb4e85bd66b92e9e58ddf3e4a7e1" + integrity sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ== + +"@scure/base@~1.1.6": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@types/connect@^3.4.33": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/dns-packet@^5.6.5": + version "5.6.5" + resolved "https://registry.yarnpkg.com/@types/dns-packet/-/dns-packet-5.6.5.tgz#49fc29a40f5d30227ed028fa1ee82601d3745e15" + integrity sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "22.14.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f" + integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== + dependencies: + undici-types "~6.21.0" + +"@types/node@^12.12.54": + 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/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@whatwg-node/disposablestack@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" + integrity sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw== + dependencies: + "@whatwg-node/promise-helpers" "^1.0.0" + tslib "^2.6.3" + +"@whatwg-node/fetch@^0.10.1": + version "0.10.5" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.5.tgz#8537e50d32bac0f2e9cecff206588ca41d836df5" + integrity sha512-+yFJU3hmXPAHJULwx0VzCIsvr/H0lvbPvbOH3areOH3NAuCxCwaJsQ8w6/MwwMcvEWIynSsmAxoyaH04KeosPg== + dependencies: + "@whatwg-node/node-fetch" "^0.7.11" + urlpattern-polyfill "^10.0.0" + +"@whatwg-node/node-fetch@^0.7.11": + version "0.7.17" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.7.17.tgz#86adaaddf06d7d098f17dfa504cd91562d81f89e" + integrity sha512-Ni8A2H/r6brNf4u8Y7ATxmWUD0xltsQ6a4NnjWSbw4PgaT34CbY+u4QtVsFj9pTC3dBKJADKjac3AieAig+PZA== + dependencies: + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/promise-helpers" "^1.2.5" + busboy "^1.6.0" + tslib "^2.6.3" + +"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.5": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.0.tgz#33629c853cfa309009b1329d3cb6208241ec2bf0" + integrity sha512-486CouizxHXucj8Ky153DDragfkMcHtVEToF5Pn/fInhUUSiCmt9Q4JVBa6UK5q4RammFBtGQ4C9qhGlXU9YbA== + dependencies: + tslib "^2.6.3" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abitype@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.7.1.tgz#16db20abe67de80f6183cf75f3de1ff86453b745" + integrity sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ== + +ansi-colors@^4.1.1: + 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.2: + 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@^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-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +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@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +ansis@^3.16.0, ansis@^3.17.0: + version "3.17.0" + resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" + integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== + +any-signal@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-4.1.1.tgz#928416c355c66899e6b2a91cad4488f0324bae03" + integrity sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA== + +apisauce@^2.1.5: + version "2.1.6" + resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-2.1.6.tgz#94887f335bf3d735305fc895c8a191c9c2608a7f" + integrity sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg== + dependencies: + axios "^0.21.4" + +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== + +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-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== + +assemblyscript@0.19.23: + version "0.19.23" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" + integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== + dependencies: + binaryen "102.0.0-nightly.20211028" + long "^5.2.0" + source-map-support "^0.5.20" + +assemblyscript@0.27.31: + version "0.27.31" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.27.31.tgz#07412b1bc42c67f78080dbaddca030ab74d3b9b2" + integrity sha512-Ra8kiGhgJQGZcBxjtMcyVRxOEJZX64kd+XGpjWzjcjgxWJVv+CAQO0aDBk4GQVhjYbOkATarC83mHjAVGtwPBQ== + dependencies: + binaryen "116.0.0-nightly.20240114" + long "^5.2.1" + +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +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== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +axios@^0.21.4: + 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" + +axios@^1.8.4: + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +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== + +binaryen@102.0.0-nightly.20211028: + version "102.0.0-nightly.20211028" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" + integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== + +binaryen@116.0.0-nightly.20240114: + version "116.0.0-nightly.20240114" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz#ad8bfbde77d4cb4715b93997114eefc30f45155b" + integrity sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A== + +blob-to-it@^2.0.5: + version "2.0.8" + resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-2.0.8.tgz#6656f7d11244b8e58cc92e0db2407e652e1336b9" + integrity sha512-1MKnG2ul1DtSgrxFHqhdJgIJODJbNj7alOLSJRD7O9S2iCJ72ZWU6j8+CVpjIdLueqwpWhy4ouvpanYlFLqkRw== + dependencies: + browser-readablestream-to-it "^2.0.0" + +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.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browser-readablestream-to-it@^2.0.0, browser-readablestream-to-it@^2.0.5: + version "2.0.8" + resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.8.tgz#997c0673556de5c6b02f8974211213d45df4ba71" + integrity sha512-+aDq+8QoTxIklc9m21oVg96Bm18EpeVke4/8vWPNu+9Ktd+G4PYavitE4gv/pjIndw1q+vxE/Rcnv1zYHrEQbQ== + +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@^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" + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.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" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +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== + +cborg@^4.0.0: + version "4.2.9" + resolved "https://registry.yarnpkg.com/cborg/-/cborg-4.2.9.tgz#e3a7fbade47b55676322463c2f8ce7a0b64afa61" + integrity sha512-HG8GprGhfzkbzDAIQApqYcN1BJAyf8vDQbzclAwaqrm3ATFnB7ygiWLr+YID+GBdfTJ+yHtzPi06218xULpZrg== + +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.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" + +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== + +chokidar@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +clean-stack@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== + dependencies: + escape-string-regexp "4.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.2.0, cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-table3@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +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== + +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.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.3: + 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== + +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== + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +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== + +cosmiconfig@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +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" + +cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +dag-jose@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/dag-jose/-/dag-jose-5.1.1.tgz#02708321f14b6f43990e238010c73464916259a7" + integrity sha512-9alfZ8Wh1XOOMel8bMpDqWsDT72ojFQCJPtwZSev9qh4f8GoCV9qrJW8jcOUhcstO8Kfm09FHGo//jqiZq3z9w== + dependencies: + "@ipld/dag-cbor" "^9.0.0" + multiformats "~13.1.3" + +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + +debug@4.4.0, debug@^4.1.1, debug@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.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" + +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + +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== + +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" + +dns-packet@^5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +docker-compose@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-1.1.1.tgz#c480b5db9d7bd3d0d1259774831ef018ec116743" + integrity sha512-UkIUz0LtzuO17Ijm6SXMGtfZMs7IvbNwvuJBiBuN93PIhr/n9/sbJMqpvYFaCBGfwu1ZM4PPPDgQzeeke4lEoA== + dependencies: + yaml "^2.2.2" + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ejs@3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-fetch@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.9.1.tgz#e28bfe78d467de3f2dec884b1d72b8b05322f30f" + integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== + dependencies: + encoding "^0.1.13" + +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== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +enquirer@2.3.6: + 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" + +err-code@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== + +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-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es6-promise@^4.0.3: + 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-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + +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== + +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== + +ethereum-cryptography@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== + dependencies: + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +execa@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +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" + +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== + +fast-fifo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.9, fast-glob@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + 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.8" + +fast-levenshtein@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== + dependencies: + fastest-levenshtein "^1.0.7" + +fastest-levenshtein@^1.0.7: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +follow-redirects@^1.14.0, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + +fs-extra@11.3.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-jetpack@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-4.3.1.tgz#cdfd4b64e6bfdec7c7dc55c76b39efaa7853bb20" + integrity sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ== + dependencies: + minimatch "^3.0.2" + rimraf "^2.6.3" + +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== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-iterator@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" + integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== + +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-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +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@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.1.tgz#1c3aef9a59d680e611b53dcd24bb8639cef064d9" + integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + +glob@^7.1.3: + 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" + +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" + +gluegun@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/gluegun/-/gluegun-5.2.0.tgz#88ba1f76f20e68a135557a4a4c8ea283291a7491" + integrity sha512-jSUM5xUy2ztYFQANne17OUm/oAd7qSX7EBksS9bQDt9UvLPqcEkeWUebmaposb8Tx7eTTD8uJVWGRe6PYSsYkg== + dependencies: + apisauce "^2.1.5" + app-module-path "^2.2.0" + cli-table3 "0.6.0" + colors "1.4.0" + cosmiconfig "7.0.1" + cross-spawn "7.0.3" + ejs "3.1.8" + enquirer "2.3.6" + execa "5.1.1" + fs-jetpack "4.3.1" + lodash.camelcase "^4.3.0" + lodash.kebabcase "^4.1.1" + lodash.lowercase "^4.3.0" + lodash.lowerfirst "^4.3.1" + lodash.pad "^4.5.1" + lodash.padend "^4.6.1" + lodash.padstart "^4.6.1" + lodash.repeat "^4.1.0" + lodash.snakecase "^4.1.1" + lodash.startcase "^4.4.0" + lodash.trim "^4.5.1" + lodash.trimend "^4.5.1" + lodash.trimstart "^4.5.1" + lodash.uppercase "^4.3.0" + lodash.upperfirst "^4.3.1" + ora "4.0.2" + pluralize "^8.0.0" + semver "7.3.5" + which "2.0.2" + yargs-parser "^21.0.0" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + 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== + +graphql-import-node@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/graphql-import-node/-/graphql-import-node-0.0.5.tgz#caf76a6cece10858b14f27cce935655398fc1bf0" + integrity sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q== + +graphql@16.10.0, graphql@^16.6.0: + version "16.10.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.10.0.tgz#24c01ae0af6b11ea87bf55694429198aaa8e220c" + integrity sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ== + +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.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hashlru@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/hashlru/-/hashlru-2.3.0.tgz#5dc15928b3f6961a2056416bb3a4910216fdfb51" + integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +http-call@^5.2.2: + version "5.3.0" + resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" + integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== + dependencies: + content-type "^1.0.4" + debug "^4.1.1" + is-retry-allowed "^1.1.0" + is-stream "^2.0.0" + parse-json "^4.0.0" + tunnel-agent "^0.6.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.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@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immutable@5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.0.3.tgz#aa037e2313ea7b5d400cd9298fa14e404c933db1" + integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== + +import-fresh@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +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.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.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interface-datastore@^8.3.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.3.1.tgz#c793f990c5cf078a24a8a2ded13f7e2099a2a282" + integrity sha512-3r0ETmHIi6HmvM5sc09QQiCD3gUfwtEM/AAChOyAd/UAKT69uk8LXfTSUBufbUIO/dU65Vj8nb9O6QjwW8vDSQ== + dependencies: + interface-store "^6.0.0" + uint8arrays "^5.1.0" + +interface-store@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-6.0.2.tgz#1746a1ee07634f7678b3aa778738b79e3f75c909" + integrity sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA== + +ipfs-unixfs@^11.1.4: + version "11.2.1" + resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-11.2.1.tgz#679adc00cdfd37b55ce5318715efa19051a300b4" + integrity sha512-gUeeX63EFgiaMgcs0cUs2ZUPvlOeEZ38okjK8twdWGZX2jYd2rCk8k/TJ3DSRIDZ2t/aZMv6I23guxHaofZE3w== + dependencies: + protons-runtime "^5.5.0" + uint8arraylist "^2.4.8" + +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +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-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-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-electron@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" + integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== + +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@^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-generator-function@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +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-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-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@^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.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +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-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +iso-url@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" + integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +it-all@^3.0.4: + version "3.0.7" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-3.0.7.tgz#04cf8605d51ca9db19d0e45ff0258abb97665d98" + integrity sha512-PkuYtu6XhJzuPTKXImd6y0qE6H91MUPV/b9xotXMAI6GjmD2v3NoHj2g5L0lS2qZ0EzyGWZU1kp0UxW8POvNBQ== + +it-first@^3.0.4: + version "3.0.7" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-3.0.7.tgz#f91f1036229e3c9889004f98fdeecc8681d5e72c" + integrity sha512-e2dVSlOP+pAxPYPVJBF4fX7au8cvGfvLhIrGCMc5aWDnCvwgOo94xHbi3Da6eXQ2jPL5FGEM8sJMn5uE8Seu+g== + +it-glob@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-3.0.2.tgz#32a17aca775eb8eb77716079b3bc16e6f016b141" + integrity sha512-yw6am0buc9W6HThDhlf/0k9LpwK31p9Y3c0hpaoth9Iaha4Kog2oRlVanLGSrPPoh9yGwHJbs+KfBJt020N6/g== + dependencies: + fast-glob "^3.3.3" + +it-last@^3.0.4: + version "3.0.7" + resolved "https://registry.yarnpkg.com/it-last/-/it-last-3.0.7.tgz#bdd6864b4915cafe3fc41823de06fe65ff548643" + integrity sha512-qG4BTveE6Wzsz5voqaOtZAfZgXTJT+yiaj45vp5S0Vi8oOdgKlRqUeolfvWoMCJ9vwSc/z9pAaNYIza7gA851w== + +it-map@^3.0.5: + version "3.1.2" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-3.1.2.tgz#64d6bd44caade9175f0419c0ae55c30d6cfcf88c" + integrity sha512-G3dzFUjTYHKumJJ8wa9dSDS3yKm8L7qDUnAgzemOD0UMztwm54Qc2v97SuUCiAgbOz/aibkSLImfoFK09RlSFQ== + dependencies: + it-peekable "^3.0.0" + +it-peekable@^3.0.0, it-peekable@^3.0.3: + version "3.0.6" + resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-3.0.6.tgz#f84c81f4ee301048fbdf4a500b3a14a5cbb44cec" + integrity sha512-odk9wn8AwFQipy8+tFaZNRCM62riraKZJRysfbmOett9wgJumCwgZFzWUBUwMoiQapEcEVGwjDpMChZIi+zLuQ== + +it-pushable@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/it-pushable/-/it-pushable-3.2.3.tgz#e2b80aed90cfbcd54b620c0a0785e546d4e5f334" + integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== + dependencies: + p-defer "^4.0.0" + +it-stream-types@^2.0.1, it-stream-types@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/it-stream-types/-/it-stream-types-2.0.2.tgz#60bbace90096796b4e6cc3bfab99cf9f2b86c152" + integrity sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww== + +it-to-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" + integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== + dependencies: + buffer "^6.0.3" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.6.0" + +jackspeak@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.0.tgz#c489c079f2b636dc4cbe9b0312a13ff1282e561b" + integrity sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw== + dependencies: + "@isaacs/cliui" "^8.0.2" + +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jayson@4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.3.tgz#db9be2e4287d9fef4fc05b5fe367abe792c2eee8" + integrity sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + uuid "^8.3.2" + ws "^7.5.10" + +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@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" + +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-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== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +kubo-rpc-client@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kubo-rpc-client/-/kubo-rpc-client-5.1.0.tgz#06f9216b2b8a62487a150261b16fd941a75adb34" + integrity sha512-yTBoyEN1Ymwi0Tzi8+Mfxylg3BRAatzykih8jzwaJjfYCqKUEqCX+43m4X78CdTPRXyIHUbdI9N0DcKRwNwk+A== + dependencies: + "@ipld/dag-cbor" "^9.0.0" + "@ipld/dag-json" "^10.0.0" + "@ipld/dag-pb" "^4.0.0" + "@libp2p/crypto" "^5.0.0" + "@libp2p/interface" "^2.0.0" + "@libp2p/logger" "^5.0.0" + "@libp2p/peer-id" "^5.0.0" + "@multiformats/multiaddr" "^12.2.1" + "@multiformats/multiaddr-to-uri" "^11.0.0" + any-signal "^4.1.1" + blob-to-it "^2.0.5" + browser-readablestream-to-it "^2.0.5" + dag-jose "^5.0.0" + electron-fetch "^1.9.1" + err-code "^3.0.1" + ipfs-unixfs "^11.1.4" + iso-url "^1.2.1" + it-all "^3.0.4" + it-first "^3.0.4" + it-glob "^3.0.1" + it-last "^3.0.4" + it-map "^3.0.5" + it-peekable "^3.0.3" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + multiformats "^13.1.0" + nanoid "^5.0.7" + native-fetch "^4.0.2" + parse-duration "^2.1.2" + react-native-fetch-api "^3.0.0" + stream-to-it "^1.0.1" + uint8arrays "^5.0.3" + wherearewe "^2.0.1" + +lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + +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== + +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.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + +lodash.lowercase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz#46515aced4acb0b7093133333af068e4c3b14e9d" + integrity sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA== + +lodash.lowerfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" + integrity sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w== + +lodash.pad@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== + +lodash.padend@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== + +lodash.padstart@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== + +lodash.repeat@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44" + integrity sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw== + +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +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.trim@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trim/-/lodash.trim-4.5.1.tgz#36425e7ee90be4aa5e27bcebb85b7d11ea47aa57" + integrity sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg== + +lodash.trimend@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trimend/-/lodash.trimend-4.5.1.tgz#12804437286b98cad8996b79414e11300114082f" + integrity sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA== + +lodash.trimstart@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" + integrity sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ== + +lodash.uppercase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz#c404abfd1469f93931f9bb24cf6cc7d57059bc73" + integrity sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA== + +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + +lodash@^4.17.21: + 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" + +long@^5.2.0, long@^5.2.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.1.tgz#9d4222d3213f38a5ec809674834e0f0ab21abe96" + integrity sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng== + +lru-cache@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.1.0.tgz#afafb060607108132dbc1cf8ae661afb69486117" + integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A== + +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" + +matchstick-as@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/matchstick-as/-/matchstick-as-0.6.0.tgz#c65296b1f51b1014d605c52067d9b5321ea630e8" + integrity sha512-E36fWsC1AbCkBFt05VsDDRoFvGSdcZg6oZJrtIe/YDBbuFh8SKbR5FcoqDhNWqSN+F7bN/iS2u8Md0SM+4pUpw== + dependencies: + wabt "1.0.24" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +merge-options@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== + dependencies: + is-plain-obj "^2.1.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.2, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + 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" + +minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ms@^3.0.0-canary.1: + version "3.0.0-canary.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-3.0.0-canary.1.tgz#c7b34fbce381492fd0b345d1cf56e14d67b77b80" + integrity sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g== + +multiformats@^13.0.0, multiformats@^13.1.0, multiformats@^13.3.1: + version "13.3.2" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.3.2.tgz#a77c2a09c490e90c73b3049551604e6e1a4854e0" + integrity sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g== + +multiformats@~13.1.3: + version "13.1.3" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.1.3.tgz#36d312401ff424948ef90746fbda9dd798cffa09" + integrity sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw== + +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + +nanoid@^5.0.7: + version "5.1.5" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.5.tgz#f7597f9d9054eb4da9548cdd53ca70f1790e87de" + integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== + +native-fetch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-4.0.2.tgz#75c8a44c5f3bb021713e5e24f2846750883e49af" + integrity sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg== + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + +ora@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.2.tgz#0e1e68fd45b135d28648b27cf08081fa6e8a297d" + integrity sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig== + dependencies: + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + +p-defer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-4.0.1.tgz#d12c6d41420785ed0d162dbd86b71ba490f7f99e" + integrity sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A== + +p-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" + integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== + dependencies: + fast-fifo "^1.0.0" + p-defer "^3.0.0" + +p-queue@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-8.1.0.tgz#d71929249868b10b16f885d8a82beeaf35d32279" + integrity sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw== + dependencies: + eventemitter3 "^5.0.1" + p-timeout "^6.1.2" + +p-timeout@^6.1.2: + version "6.1.4" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.4.tgz#418e1f4dd833fa96a2e3f532547dd2abdb08dbc2" + integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg== + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +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-duration@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-2.1.4.tgz#02918736726f657eaf70b52bb8da7910316df51d" + integrity sha512-b98m6MsCh+akxfyoz9w9dt0AlH2dfYLOBss5SdDsr9pkhKNvkWBXU/r8A4ahmIGByBOLV2+4YwfCuFxbDDaGyg== + +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" + +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@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + dependencies: + lru-cache "^11.0.0" + minipass "^7.1.2" + +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== + +picocolors@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +prettier@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" + integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== + +progress-events@^1.0.0, progress-events@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/progress-events/-/progress-events-1.0.1.tgz#693b6d4153f08c1418ae3cd5fcad8596c91db7e8" + integrity sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +protons-runtime@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-5.5.0.tgz#ea06d9ef843aad77ea5de3e1ebafa81b58c24570" + integrity sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA== + dependencies: + uint8-varint "^2.0.2" + uint8arraylist "^2.4.3" + uint8arrays "^5.0.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +react-native-fetch-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" + integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== + dependencies: + p-defer "^3.0.0" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +registry-auth-token@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== + dependencies: + "@pnpm/npm-conf" "^2.1.0" + +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== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rimraf@^2.6.3: + 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" + +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + +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" + +safe-buffer@^5.0.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-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +semver@7.7.1, semver@^7.6.3: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +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@^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== + +signal-exit@^3.0.2, signal-exit@^3.0.3: + 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== + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@^0.5.20: + 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: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +stream-to-it@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-1.0.1.tgz#7d5e1b04bab70facd48273279bfa49f0d0165950" + integrity sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA== + dependencies: + it-stream-types "^2.0.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== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.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-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +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@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +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-color@^8: + 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@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tmp-promise@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== + dependencies: + tmp "^0.2.0" + +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" + +tmp@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +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" + +tslib@^2.6.3: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +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" + +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== + +uint8-varint@^2.0.1, uint8-varint@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-2.0.4.tgz#85be52b3849eb30f2c3640a2df8a14364180affb" + integrity sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw== + dependencies: + uint8arraylist "^2.0.0" + uint8arrays "^5.0.0" + +uint8arraylist@^2.0.0, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: + version "2.4.8" + resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" + integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== + dependencies: + uint8arrays "^5.0.1" + +uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.0.3, uint8arrays@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.1.0.tgz#14047c9bdf825d025b7391299436e5e50e7270f1" + integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== + dependencies: + multiformats "^13.0.0" + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici@7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-7.4.0.tgz#a2606aa5ceeeaac0ddcc00937586c3bc06bfafdc" + integrity sha512-PUQM3/es3noM24oUn10u3kNNap0AbxESOmnssmW+dOi9yGwlUSi5nTNYl3bNbTkWOF8YZDkx2tCmj9OtQ3iGGw== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +urlpattern-polyfill@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" + integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + +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" + +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== + +wabt@1.0.24: + version "1.0.24" + resolved "https://registry.yarnpkg.com/wabt/-/wabt-1.0.24.tgz#c02e0b5b4503b94feaf4a30a426ef01c1bea7c6c" + integrity sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg== + +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" + +weald@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/weald/-/weald-1.0.4.tgz#8858cf9186869deba58357ae10cf26eaada80bb0" + integrity sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ== + dependencies: + ms "^3.0.0-canary.1" + supports-color "^9.4.0" + +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + +web3-errors@^1.2.0, web3-errors@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-errors/-/web3-errors-1.3.1.tgz#163bc4d869f98614760b683d733c3ed1fb415d98" + integrity sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ== + dependencies: + web3-types "^1.10.0" + +web3-eth-abi@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz#1dca9d80341b3cd7a1ae07dc98080c2073d62a29" + integrity sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg== + dependencies: + abitype "0.7.1" + web3-errors "^1.3.1" + web3-types "^1.10.0" + web3-utils "^4.3.3" + web3-validator "^2.0.6" + +web3-types@^1.10.0, web3-types@^1.6.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-types/-/web3-types-1.10.0.tgz#41b0b4d2dd75e919d5b6f37bf139e29f445db04e" + integrity sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw== + +web3-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.3.3.tgz#e380a1c03a050d3704f94bd08c1c9f50a1487205" + integrity sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw== + dependencies: + ethereum-cryptography "^2.0.0" + eventemitter3 "^5.0.1" + web3-errors "^1.3.1" + web3-types "^1.10.0" + web3-validator "^2.0.6" + +web3-validator@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.6.tgz#a0cdaa39e1d1708ece5fae155b034e29d6a19248" + integrity sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg== + dependencies: + ethereum-cryptography "^2.0.0" + util "^0.12.5" + web3-errors "^1.2.0" + web3-types "^1.6.0" + zod "^3.21.4" + +wherearewe@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wherearewe/-/wherearewe-2.0.1.tgz#37c97a7bf112dca8db34bfefb2f6c997af312bb8" + integrity sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw== + dependencies: + is-electron "^2.2.0" + +which-typed-array@^1.1.16, which-typed-array@^1.1.2: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@2.0.2, 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" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.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" + +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@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +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== + +yaml@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" + integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.2.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6" + integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== + +yargs-parser@^21.0.0: + 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== + +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== + +zod@^3.21.4: + version "3.24.2" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" + integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== From 5f3d2d61e361324a743540a6129f1007a3cb7101 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 18 Apr 2025 01:10:34 +0530 Subject: [PATCH 02/51] fix tx input decoding for addRoots --- subgraph/src/pdp-verifier.ts | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index f5b19a2..11db284 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -484,28 +484,32 @@ function readBytes(data: Bytes, offset: i32): Bytes { ); return Bytes.empty(); } - const dataOffset = readUint256(data, offset).toI32(); + const dataTupleRelOffset = readUint256(data, offset).toI32(); + const dataTupleAbsOffset = offset + dataTupleRelOffset; - // Ensure dataOffset is valid - if (dataOffset < 0 || data.length < dataOffset + 32) { + // Ensure dataTupleOffset is valid + if (dataTupleAbsOffset < 0 || data.length < dataTupleAbsOffset + 32) { log.error( - "readBytes: Invalid dataOffset {} or data length {} for reading length", - [dataOffset.toString(), data.length.toString()] + "readBytes: Invalid dataTupleOffset {} or data length {} for reading length", + [dataTupleAbsOffset.toString(), data.length.toString()] ); return Bytes.empty(); } - const length = readUint256(data, dataOffset).toI32(); + const cidBytesRelOffset = readUint256(data, dataTupleAbsOffset).toI32(); + const cidBytesAbsOffset = dataTupleAbsOffset + cidBytesRelOffset; + + const length = readUint256(data, cidBytesAbsOffset).toI32(); // Ensure length is non-negative if (length < 0) { - log.error("readBytes: Invalid negative length {} at dataOffset {}", [ + log.error("readBytes: Invalid negative length {} at cidBytesAbsOffset {}", [ length.toString(), - dataOffset.toString(), + cidBytesAbsOffset.toString(), ]); return Bytes.empty(); } - const dataStart = dataOffset + 32; + const dataStart = cidBytesAbsOffset + 32; // Refined bounds check to avoid problematic casting // 1. dataStart must be non-negative. @@ -663,7 +667,7 @@ export function handleRootsAdded(event: RootsAddedEvent): void { encodedData, structsBaseOffset + i * 32 ).toI32(); - const structDataAbsOffset = rootsDataOffset + structDataRelOffset; // Absolute offset from start of encodedData (after selector) + const structDataAbsOffset = structsBaseOffset + structDataRelOffset; // Absolute offset from start of encodedData (after selector) // Decode struct { root: tuple { bytes }, rawSize: uint256 } if ( @@ -746,7 +750,7 @@ export function handleRootsAdded(event: RootsAddedEvent): void { root.rawSize = rawSize; // Store hex representation of root bytes as CID for now - root.cid = rootBytes.length > 0 ? rootBytes.toHex() : ""; // Use hex or empty string + root.cid = rootBytes.length > 0 ? rootBytes : Bytes.fromI32(0); // Use hex or empty string root.updatedAt = event.block.timestamp; root.removed = false; root.save(); From e94ff9295cd35000ba398dbf54ac1f94703ceb16 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 18 Apr 2025 01:11:43 +0530 Subject: [PATCH 03/51] add tests for handleRootsAdded handler --- subgraph/tests/pdp-verifier-utils.ts | 264 +++++++++------------------ subgraph/tests/pdp-verifier.test.ts | 176 ++++++++++++++---- 2 files changed, 228 insertions(+), 212 deletions(-) diff --git a/subgraph/tests/pdp-verifier-utils.ts b/subgraph/tests/pdp-verifier-utils.ts index 835c9ad..9ed9295 100644 --- a/subgraph/tests/pdp-verifier-utils.ts +++ b/subgraph/tests/pdp-verifier-utils.ts @@ -1,183 +1,89 @@ -import { newMockEvent } from "matchstick-as" -import { ethereum, BigInt, Address } from "@graphprotocol/graph-ts" +import { newMockEvent } from "matchstick-as"; import { - Issue, - Redeem, - Deprecate, - Params, - DestroyedBlackFunds, - AddedBlackList, - RemovedBlackList, - Approval, - Transfer, - Pause, - Unpause -} from "../generated/PDPVerifier/PDPVerifier" - -export function createIssueEvent(amount: BigInt): Issue { - let issueEvent = changetype(newMockEvent()) - - issueEvent.parameters = new Array() - - issueEvent.parameters.push( - new ethereum.EventParam("amount", ethereum.Value.fromUnsignedBigInt(amount)) - ) - - return issueEvent -} - -export function createRedeemEvent(amount: BigInt): Redeem { - let redeemEvent = changetype(newMockEvent()) - - redeemEvent.parameters = new Array() - - redeemEvent.parameters.push( - new ethereum.EventParam("amount", ethereum.Value.fromUnsignedBigInt(amount)) - ) - - return redeemEvent -} - -export function createDeprecateEvent(newAddress: Address): Deprecate { - let deprecateEvent = changetype(newMockEvent()) - - deprecateEvent.parameters = new Array() - - deprecateEvent.parameters.push( - new ethereum.EventParam( - "newAddress", - ethereum.Value.fromAddress(newAddress) - ) - ) - - return deprecateEvent -} - -export function createParamsEvent( - feeBasisPoints: BigInt, - maxFee: BigInt -): Params { - let paramsEvent = changetype(newMockEvent()) - - paramsEvent.parameters = new Array() - - paramsEvent.parameters.push( - new ethereum.EventParam( - "feeBasisPoints", - ethereum.Value.fromUnsignedBigInt(feeBasisPoints) - ) - ) - paramsEvent.parameters.push( - new ethereum.EventParam("maxFee", ethereum.Value.fromUnsignedBigInt(maxFee)) - ) - - return paramsEvent -} - -export function createDestroyedBlackFundsEvent( - _blackListedUser: Address, - _balance: BigInt -): DestroyedBlackFunds { - let destroyedBlackFundsEvent = changetype(newMockEvent()) - - destroyedBlackFundsEvent.parameters = new Array() - - destroyedBlackFundsEvent.parameters.push( - new ethereum.EventParam( - "_blackListedUser", - ethereum.Value.fromAddress(_blackListedUser) - ) - ) - destroyedBlackFundsEvent.parameters.push( - new ethereum.EventParam( - "_balance", - ethereum.Value.fromUnsignedBigInt(_balance) - ) - ) - - return destroyedBlackFundsEvent -} - -export function createAddedBlackListEvent(_user: Address): AddedBlackList { - let addedBlackListEvent = changetype(newMockEvent()) - - addedBlackListEvent.parameters = new Array() - - addedBlackListEvent.parameters.push( - new ethereum.EventParam("_user", ethereum.Value.fromAddress(_user)) - ) - - return addedBlackListEvent -} - -export function createRemovedBlackListEvent(_user: Address): RemovedBlackList { - let removedBlackListEvent = changetype(newMockEvent()) - - removedBlackListEvent.parameters = new Array() - - removedBlackListEvent.parameters.push( - new ethereum.EventParam("_user", ethereum.Value.fromAddress(_user)) - ) - - return removedBlackListEvent -} - -export function createApprovalEvent( - owner: Address, - spender: Address, - value: BigInt -): Approval { - let approvalEvent = changetype(newMockEvent()) - - approvalEvent.parameters = new Array() - - approvalEvent.parameters.push( - new ethereum.EventParam("owner", ethereum.Value.fromAddress(owner)) - ) - approvalEvent.parameters.push( - new ethereum.EventParam("spender", ethereum.Value.fromAddress(spender)) - ) - approvalEvent.parameters.push( - new ethereum.EventParam("value", ethereum.Value.fromUnsignedBigInt(value)) - ) - - return approvalEvent -} - -export function createTransferEvent( - from: Address, - to: Address, - value: BigInt -): Transfer { - let transferEvent = changetype(newMockEvent()) - - transferEvent.parameters = new Array() - - transferEvent.parameters.push( - new ethereum.EventParam("from", ethereum.Value.fromAddress(from)) - ) - transferEvent.parameters.push( - new ethereum.EventParam("to", ethereum.Value.fromAddress(to)) - ) - transferEvent.parameters.push( - new ethereum.EventParam("value", ethereum.Value.fromUnsignedBigInt(value)) - ) - - return transferEvent -} - -export function createPauseEvent(): Pause { - let pauseEvent = changetype(newMockEvent()) - - pauseEvent.parameters = new Array() - - return pauseEvent + ethereum, + BigInt, + Address, + Bytes, + crypto, + log, +} from "@graphprotocol/graph-ts"; +import { + ProofSetCreated, + RootsAdded, +} from "../generated/PDPVerifier/PDPVerifier"; + +// Mocks the ProofSetCreated event +// event ProofSetCreated(uint256 indexed setId, address indexed provider, bytes32 root); +export function createProofSetCreatedEvent( + setId: BigInt, + provider: Address, + root: Bytes, // Although root is part of the event, handleProofSetCreated might not use it directly + contractAddress: Address, + blockNumber: BigInt = BigInt.fromI32(1), + timestamp: BigInt = BigInt.fromI32(1) +): ProofSetCreated { + let proofSetCreatedEvent = changetype(newMockEvent()); + + proofSetCreatedEvent.parameters = new Array(); + + let setIdParam = new ethereum.EventParam( + "setId", + ethereum.Value.fromUnsignedBigInt(setId) + ); + let providerParam = new ethereum.EventParam( + "provider", + ethereum.Value.fromAddress(provider) + ); + let rootParam = new ethereum.EventParam( + "root", + ethereum.Value.fromFixedBytes(root) + ); + + proofSetCreatedEvent.parameters.push(setIdParam); + proofSetCreatedEvent.parameters.push(providerParam); + proofSetCreatedEvent.parameters.push(rootParam); + + proofSetCreatedEvent.address = contractAddress; + proofSetCreatedEvent.block.number = blockNumber; + proofSetCreatedEvent.block.timestamp = timestamp; + + // Transaction input is not strictly needed if the handler only uses event.params + // proofSetCreatedEvent.transaction.input = Bytes.fromI32(0); + + return proofSetCreatedEvent; } -export function createUnpauseEvent(): Unpause { - let unpauseEvent = changetype(newMockEvent()) - - unpauseEvent.parameters = new Array() - - return unpauseEvent +export function createRootsAddedEvent( + setId: BigInt, + rootIds: BigInt[], + sender: Address, + contractAddress: Address +): RootsAdded { + let rootsAddedEvent = changetype(newMockEvent()); + + rootsAddedEvent.parameters = new Array(); + rootsAddedEvent.address = contractAddress; + rootsAddedEvent.transaction.from = sender; + rootsAddedEvent.transaction.to = contractAddress; + + let setIdParam = new ethereum.EventParam( + "setId", + ethereum.Value.fromUnsignedBigInt(setId) + ); + let rootIdsParam = new ethereum.EventParam( + "rootIds", + ethereum.Value.fromUnsignedBigIntArray(rootIds) + ); + rootsAddedEvent.parameters.push(setIdParam); + rootsAddedEvent.parameters.push(rootIdsParam); + + let txInputHex = + "0x11c0ee4a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000fe000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000270181e20392202015ef4cc07f475ed2ee3ad23cfbb7fbffd6707bf8207743d6e4a4640b3742e709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + let txInput = Bytes.fromHexString(txInputHex); + rootsAddedEvent.transaction.input = txInput; + + rootsAddedEvent.block.number = BigInt.fromI32(1); + rootsAddedEvent.block.timestamp = BigInt.fromI32(1); + + return rootsAddedEvent; } diff --git a/subgraph/tests/pdp-verifier.test.ts b/subgraph/tests/pdp-verifier.test.ts index 4234019..50284c9 100644 --- a/subgraph/tests/pdp-verifier.test.ts +++ b/subgraph/tests/pdp-verifier.test.ts @@ -4,43 +4,153 @@ import { test, clearStore, beforeAll, - afterAll -} from "matchstick-as/assembly/index" -import { BigInt, Address } from "@graphprotocol/graph-ts" -import { Issue } from "../generated/schema" -import { Issue as IssueEvent } from "../generated/PDPVerifier/PDPVerifier" -import { handleIssue } from "../src/pdp-verifier" -import { createIssueEvent } from "./pdp-verifier-utils" - -// Tests structure (matchstick-as >=0.5.0) -// https://thegraph.com/docs/en/developer/matchstick/#tests-structure-0-5-0 - -describe("Describe entity assertions", () => { + afterAll, +} from "matchstick-as/assembly/index"; +import { BigInt, Address, Bytes, ByteArray } from "@graphprotocol/graph-ts"; +import { Root, ProofSet, Provider, EventLog } from "../generated/schema"; +import { handleRootsAdded, handleProofSetCreated } from "../src/pdp-verifier"; +import { + createRootsAddedEvent, + createProofSetCreatedEvent, +} from "./pdp-verifier-utils"; + +// Define constants for test data +const SET_ID = BigInt.fromI32(0); +const ROOT_ID_1 = BigInt.fromI32(101); +const RAW_SIZE_1 = BigInt.fromI32(1040384); +// CIDs as strings +const ROOT_CID_1_STR = + "0x0181e20392202015ef4cc07f475ed2ee3ad23cfbb7fbffd6707bf8207743d6e4a4640b3742e709"; +const SENDER_ADDRESS = Address.fromString( + "0xa16081f360e3847006db660bae1c6d1b2e17ec2a" +); +const LISTENER_ADDRESS = Address.fromString( + "0x0000000000000000000000000000000000000001" +); +const CONTRACT_ADDRESS = Address.fromString( + "0xb16081f360e3847006db660bae1c6d1b2e17ec2b" +); +const PROOF_SET_ID_BYTES = Bytes.fromBigInt(SET_ID); + +// Helper function to create Root entity ID +function createRootEntityId(proofSetIdBytes: Bytes, rootId: BigInt): Bytes { + // .concatI32 returns ByteArray, which needs to be converted back to Bytes + return Bytes.fromByteArray(proofSetIdBytes.concatI32(rootId.toI32())); +} + +// Helper to convert string to Bytes and pad to 32 bytes +function stringToBytes32(str: string): Bytes { + let utf8Bytes = Bytes.fromUTF8(str); + let paddedBytes = new ByteArray(32); // Create a 32-byte array, initialized to zeros + + // Copy bytes from utf8Bytes, ensuring we don't exceed 32 bytes + for (let i = 0; i < utf8Bytes.length && i < 32; i++) { + paddedBytes[i] = utf8Bytes[i]; + } + return Bytes.fromByteArray(paddedBytes); +} + +describe("handleRootsAdded Tests", () => { beforeAll(() => { - let amount = BigInt.fromI32(234) - let newIssueEvent = createIssueEvent(amount) - handleIssue(newIssueEvent) - }) + // 1. Create the necessary ProofSet first + let mockProofSetCreatedEvent = createProofSetCreatedEvent( + SET_ID, + SENDER_ADDRESS, + Bytes.fromI32(123), // Dummy root, as it's required by the function but not used by the handler here + CONTRACT_ADDRESS, + BigInt.fromI32(50), // Match block number for consistency + BigInt.fromI32(1678886400) // Match timestamp for consistency + ); + handleProofSetCreated(mockProofSetCreatedEvent); + + // 2. Create and handle the RootsAdded event + let rootIds = [ROOT_ID_1]; + let rootsAddedEvent = createRootsAddedEvent( + SET_ID, + rootIds, + SENDER_ADDRESS, + CONTRACT_ADDRESS + ); + + // Set block/tx details on the mock event if needed by handler + rootsAddedEvent.block.timestamp = BigInt.fromI32(100); // Example timestamp + rootsAddedEvent.block.number = BigInt.fromI32(50); // Example block number + rootsAddedEvent.logIndex = BigInt.fromI32(1); // Example log index + rootsAddedEvent.transaction.hash = Bytes.fromHexString( + "0x" + "c".repeat(64) + ); + + handleRootsAdded(rootsAddedEvent); + }); afterAll(() => { - clearStore() - }) + clearStore(); + }); + + test("Entities created and stored correctly", () => { + // Assert counts + assert.entityCount("ProofSet", 1); + assert.entityCount("Root", 1); // One root was added + assert.entityCount("Provider", 1); + assert.entityCount("EventLog", 2); // RootsAdded creates one event log - // For more test scenarios, see: - // https://thegraph.com/docs/en/developer/matchstick/#write-a-unit-test + // --- Assert ProofSet fields --- + let proofSetId = PROOF_SET_ID_BYTES.toHex(); + assert.fieldEquals("ProofSet", proofSetId, "setId", SET_ID.toString()); + assert.fieldEquals("ProofSet", proofSetId, "totalRoots", "1"); // Initially 0, added 1 + let expectedTotalSize = RAW_SIZE_1.toString(); + assert.fieldEquals( + "ProofSet", + proofSetId, + "totalDataSize", + expectedTotalSize + ); + assert.fieldEquals("ProofSet", proofSetId, "updatedAt", "100"); + assert.fieldEquals("ProofSet", proofSetId, "blockNumber", "50"); + + // --- Assert Root fields --- + let rootEntityId1 = createRootEntityId( + Bytes.fromByteArray(PROOF_SET_ID_BYTES), + ROOT_ID_1 + ).toHex(); + assert.fieldEquals("Root", rootEntityId1, "rootId", ROOT_ID_1.toString()); + assert.fieldEquals("Root", rootEntityId1, "setId", SET_ID.toString()); + assert.fieldEquals("Root", rootEntityId1, "cid", ROOT_CID_1_STR); + assert.fieldEquals("Root", rootEntityId1, "rawSize", RAW_SIZE_1.toString()); + // assert.fieldEquals("Root", rootEntityId1, "createdAt", "100"); + assert.fieldEquals("Root", rootEntityId1, "blockNumber", "50"); - test("Issue created and stored", () => { - assert.entityCount("Issue", 1) + // --- Assert Provider fields --- + let providerId = SENDER_ADDRESS.toHex(); + assert.fieldEquals( + "Provider", + providerId, + "totalDataSize", + expectedTotalSize + ); + assert.fieldEquals("Provider", providerId, "updatedAt", "100"); + assert.fieldEquals("Provider", providerId, "blockNumber", "50"); + // Assuming provider was newly created by this event + // assert.fieldEquals("Provider", providerId, "createdAt", "100"); - // 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function + // --- Assert EventLog fields --- + // Construct expected event ID: txHash + logIndex + let eventId = Bytes.fromHexString("0x" + "c".repeat(64)) + .concatI32(BigInt.fromI32(1).toI32()) + .toHex(); + assert.fieldEquals("EventLog", eventId, "name", "RootsAdded"); + assert.fieldEquals("EventLog", eventId, "setId", SET_ID.toString()); assert.fieldEquals( - "Issue", - "0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1", - "amount", - "234" - ) - - // More assert options: - // https://thegraph.com/docs/en/developer/matchstick/#asserts - }) -}) + "EventLog", + eventId, + "transactionHash", + "0x" + "c".repeat(64) + ); + assert.fieldEquals("EventLog", eventId, "blockNumber", "50"); + assert.fieldEquals("EventLog", eventId, "logIndex", "1"); + assert.fieldEquals("EventLog", eventId, "createdAt", "100"); + // Check data field (simple representation) + let expectedData = `{ "setId": "${SET_ID.toString()}", "rootIds": [${ROOT_ID_1.toString()}] }`; + assert.fieldEquals("EventLog", eventId, "data", expectedData); + }); +}); From 9825c2acaf57d2571f4a4a11b4984a05f7e549cb Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 18 Apr 2025 01:12:23 +0530 Subject: [PATCH 04/51] store cid in bytes format --- subgraph/schema.graphql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 429dff3..1cc767b 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -34,7 +34,7 @@ type Root @entity(immutable: false) { setId: BigInt! # uint256 rootId: BigInt! # uint256 rawSize: BigInt! # uint256 - cid: String! + cid: Bytes! removed: Boolean! totalProofsSubmitted: BigInt! # uint256 totalPeriodsFaulted: BigInt! # uint256 From 3221aa8efa0fe5ba3622824a790c8401d426c1e2 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 18 Apr 2025 01:12:51 +0530 Subject: [PATCH 05/51] remove unused dependencies --- subgraph/package-lock.json | 4855 +++++++++++++++++++++++++++++++++++ subgraph/package.json | 4 +- subgraph/src/pdp-service.ts | 6 +- subgraph/yarn.lock | 1129 ++++---- 4 files changed, 5388 insertions(+), 606 deletions(-) create mode 100644 subgraph/package-lock.json diff --git a/subgraph/package-lock.json b/subgraph/package-lock.json new file mode 100644 index 0000000..e5eb00a --- /dev/null +++ b/subgraph/package-lock.json @@ -0,0 +1,4855 @@ +{ + "name": "pd", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pd", + "license": "UNLICENSED", + "dependencies": { + "@graphprotocol/graph-cli": "0.97.0", + "@graphprotocol/graph-ts": "0.37.0" + }, + "devDependencies": { + "matchstick-as": "0.6.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@chainsafe/is-ip": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.1.0.tgz", + "integrity": "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==", + "license": "MIT" + }, + "node_modules/@chainsafe/netmask": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", + "integrity": "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==", + "license": "MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1" + } + }, + "node_modules/@float-capital/float-subgraph-uncrashable": { + "version": "0.0.0-internal-testing.5", + "resolved": "https://registry.npmjs.org/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz", + "integrity": "sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA==", + "license": "MIT", + "dependencies": { + "@rescript/std": "9.0.0", + "graphql": "^16.6.0", + "graphql-import-node": "^0.0.5", + "js-yaml": "^4.1.0" + }, + "bin": { + "uncrashable": "bin/uncrashable" + } + }, + "node_modules/@graphprotocol/graph-cli": { + "version": "0.97.0", + "resolved": "https://registry.npmjs.org/@graphprotocol/graph-cli/-/graph-cli-0.97.0.tgz", + "integrity": "sha512-SvijthiWbQEL3HdRDf2ydc4uAUwWJfTKyiXKXkXTtimk/hXNgzf4DuqxZPVQOOq4yx5U18iOCc/TKkTI7xCNjw==", + "license": "(Apache-2.0 OR MIT)", + "dependencies": { + "@float-capital/float-subgraph-uncrashable": "0.0.0-internal-testing.5", + "@oclif/core": "4.2.8", + "@oclif/plugin-autocomplete": "^3.2.11", + "@oclif/plugin-not-found": "^3.2.29", + "@oclif/plugin-warn-if-update-available": "^3.1.24", + "@pinax/graph-networks-registry": "^0.6.5", + "@whatwg-node/fetch": "^0.10.1", + "assemblyscript": "0.19.23", + "chokidar": "4.0.3", + "debug": "4.4.0", + "docker-compose": "1.1.1", + "fs-extra": "11.3.0", + "glob": "11.0.1", + "gluegun": "5.2.0", + "graphql": "16.10.0", + "immutable": "5.0.3", + "jayson": "4.1.3", + "js-yaml": "4.1.0", + "kubo-rpc-client": "^5.0.2", + "open": "10.1.0", + "prettier": "3.5.3", + "semver": "7.7.1", + "tmp-promise": "3.0.3", + "undici": "7.4.0", + "web3-eth-abi": "4.4.1", + "yaml": "2.7.0" + }, + "bin": { + "graph": "bin/run.js" + }, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/@graphprotocol/graph-cli/node_modules/@oclif/core": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.8.tgz", + "integrity": "sha512-OWv4Va6bERxIhrYcnUGzyhGRqktc64lJO6cZ3UwkzJDpfR8ZrbCxRfKRBBah1i8kzUlOAeAXnpbMBMah3skKwA==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.16.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@graphprotocol/graph-cli/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@graphprotocol/graph-ts": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@graphprotocol/graph-ts/-/graph-ts-0.37.0.tgz", + "integrity": "sha512-3xp/sO8zFDBkX44ydGB87ow5Cyrfr/SAm/cWzIRzUVL7ROw0KUyFBG1xj4KKlMnAod7/RL99zChYquC15H4Oqg==", + "dependencies": { + "assemblyscript": "0.27.31" + } + }, + "node_modules/@graphprotocol/graph-ts/node_modules/assemblyscript": { + "version": "0.27.31", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.31.tgz", + "integrity": "sha512-Ra8kiGhgJQGZcBxjtMcyVRxOEJZX64kd+XGpjWzjcjgxWJVv+CAQO0aDBk4GQVhjYbOkATarC83mHjAVGtwPBQ==", + "license": "Apache-2.0", + "dependencies": { + "binaryen": "116.0.0-nightly.20240114", + "long": "^5.2.1" + }, + "bin": { + "asc": "bin/asc.js", + "asinit": "bin/asinit.js" + }, + "engines": { + "node": ">=16", + "npm": ">=7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/assemblyscript" + } + }, + "node_modules/@graphprotocol/graph-ts/node_modules/binaryen": { + "version": "116.0.0-nightly.20240114", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz", + "integrity": "sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A==", + "license": "Apache-2.0", + "bin": { + "wasm-opt": "bin/wasm-opt", + "wasm2js": "bin/wasm2js" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz", + "integrity": "sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.9.tgz", + "integrity": "sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.10.tgz", + "integrity": "sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw==", + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/core/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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.10.tgz", + "integrity": "sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.12.tgz", + "integrity": "sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", + "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.9.tgz", + "integrity": "sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.12.tgz", + "integrity": "sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.12.tgz", + "integrity": "sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.1.tgz", + "integrity": "sha512-UlmM5FVOZF0gpoe1PT/jN4vk8JmpIWBlMvTL8M+hlvPmzN89K6z03+IFmyeu/oFCenwdwHDr2gky7nIGSEVvlA==", + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.1.5", + "@inquirer/confirm": "^5.1.9", + "@inquirer/editor": "^4.2.10", + "@inquirer/expand": "^4.0.12", + "@inquirer/input": "^4.1.9", + "@inquirer/number": "^3.0.12", + "@inquirer/password": "^4.0.12", + "@inquirer/rawlist": "^4.0.12", + "@inquirer/search": "^3.0.12", + "@inquirer/select": "^4.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.12.tgz", + "integrity": "sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.12.tgz", + "integrity": "sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.1.tgz", + "integrity": "sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz", + "integrity": "sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@ipld/dag-cbor": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.2.tgz", + "integrity": "sha512-uIEOuruCqKTP50OBWwgz4Js2+LhiBQaxc57cnP71f45b1mHEAo1OCR1Zn/TbvSW/mV1x+JqhacIktkKyaYqhCw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-json": { + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.3.tgz", + "integrity": "sha512-itacv1j1hvYgLox2B42Msn70QLzcr0MEo5yGIENuw2SM/lQzq9bmBiMky+kDsIrsqqblKTXcHBZnnmK7D4a6ZQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-pb": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.3.tgz", + "integrity": "sha512-ueULCaaSCcD+dQga6nKiRr+RSeVgdiYiEPKVUu5iQMNYDN+9osd0KpR3UDd9uQQ+6RWuv9L34SchfEwj7YIbOA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@libp2p/crypto": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.0.tgz", + "integrity": "sha512-hcmScz9m7Ae7R7b/w3x9DX+i60ZIUVsMmsHyIo0vSlGsxO0+tyM4UKUia5EpSp/i1SB/W1IFXxlURwpiX7R5eQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.8.0", + "@noble/curves": "^1.7.0", + "@noble/hashes": "^1.6.1", + "multiformats": "^13.3.1", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/crypto/node_modules/@noble/curves": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz", + "integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.7.1" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@libp2p/crypto/node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz", + "integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@libp2p/crypto/node_modules/@noble/hashes": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", + "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@libp2p/interface": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.8.0.tgz", + "integrity": "sha512-QnIjqqUv2aDiBho6OGcNNhLT3Ac4RKrh41qoQmqG6csMRkUUx/xZMkfFJx3j0wGCIP8GS4sGspkTt4wCpPbSWw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.3.3", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.1", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/logger": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.14.tgz", + "integrity": "sha512-rJeEq7iuKMMjel0zzH10dXzcWn4Q2yywbv5vM9B1xTQpkD4uxTbBlQs+EL9+pmwaaQrrriEGqluZOTzHvUzJUg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.8.0", + "@multiformats/multiaddr": "^12.3.3", + "interface-datastore": "^8.3.1", + "multiformats": "^13.3.1", + "weald": "^1.0.4" + } + }, + "node_modules/@libp2p/peer-id": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.1.tgz", + "integrity": "sha512-dVpgln2gWybglCC8hiQqyGlyXU7F7ovoOqwnnMs8HxurGEH9QxgmCfxRP4p8s86bQwl1MFbyj0AqYPy/zbKLrA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.0", + "@libp2p/interface": "^2.8.0", + "multiformats": "^13.3.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@multiformats/dns": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz", + "integrity": "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@types/dns-packet": "^5.6.5", + "buffer": "^6.0.3", + "dns-packet": "^5.6.1", + "hashlru": "^2.3.0", + "p-queue": "^8.0.1", + "progress-events": "^1.0.0", + "uint8arrays": "^5.0.2" + } + }, + "node_modules/@multiformats/multiaddr": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.4.0.tgz", + "integrity": "sha512-FL7yBTLijJ5JkO044BGb2msf+uJLrwpD6jD6TkXlbjA9N12+18HT40jvd4o5vL4LOJMc86dPX6tGtk/uI9kYKg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/@multiformats/multiaddr-to-uri": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.0.tgz", + "integrity": "sha512-9RNmlIGwZbBLsHekT50dbt4o4u8Iciw9kGjv+WHiGxQdsJ6xKKjU1+C0Vbas6RilMbaVOAOnEyfNcXbUmTkLxQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.3.0" + } + }, + "node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "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==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oclif/core": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.10.tgz", + "integrity": "sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.17.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^9.0.5", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "supports-color": "^8", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@oclif/plugin-autocomplete": { + "version": "3.2.27", + "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.27.tgz", + "integrity": "sha512-Aywx0Vw36k0fQVBa2uLb8FKblGAP7ly1cQ5bdKqL4BmhJnUasy37tpyIDMUor93asOS+kKFQg+52pOxQgXHi1A==", + "license": "MIT", + "dependencies": { + "@oclif/core": "^4", + "ansis": "^3.16.0", + "debug": "^4.4.0", + "ejs": "^3.1.10" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-not-found": { + "version": "3.2.49", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.49.tgz", + "integrity": "sha512-3V74/O5aFAqTTCJ7+X04M6vmt59Dk8HimB2uOlGgJrR7yLMW9JsVWKpDZZ6fl1hfd5kK9Jn4oaEt/1LuwfW1wQ==", + "license": "MIT", + "dependencies": { + "@inquirer/prompts": "^7.4.1", + "@oclif/core": "^4", + "ansis": "^3.17.0", + "fast-levenshtein": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-warn-if-update-available": { + "version": "3.1.38", + "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.38.tgz", + "integrity": "sha512-lwYtVXdQaBJV94DglPu140Bc6NmmysHhX5PZtdxeNcUG2BgSX/Sre7oCzMEgmuhe4Lu2jDviMxTX81a8wv6v1w==", + "license": "MIT", + "dependencies": { + "@oclif/core": "^4", + "ansis": "^3.17.0", + "debug": "^4.4.0", + "http-call": "^5.2.2", + "lodash": "^4.17.21", + "registry-auth-token": "^5.1.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@pinax/graph-networks-registry": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/@pinax/graph-networks-registry/-/graph-networks-registry-0.6.7.tgz", + "integrity": "sha512-xogeCEZ50XRMxpBwE3TZjJ8RCO8Guv39gDRrrKtlpDEDEMLm0MzD3A0SQObgj7aF7qTZNRTWzsuvQdxgzw25wQ==", + "license": "MIT" + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", + "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rescript/std": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@rescript/std/-/std-9.0.0.tgz", + "integrity": "sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ==", + "license": "SEE LICENSE IN LICENSE" + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/dns-packet": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", + "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", + "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@whatwg-node/disposablestack": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz", + "integrity": "sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw==", + "license": "MIT", + "dependencies": { + "@whatwg-node/promise-helpers": "^1.0.0", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/fetch": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.5.tgz", + "integrity": "sha512-+yFJU3hmXPAHJULwx0VzCIsvr/H0lvbPvbOH3areOH3NAuCxCwaJsQ8w6/MwwMcvEWIynSsmAxoyaH04KeosPg==", + "license": "MIT", + "dependencies": { + "@whatwg-node/node-fetch": "^0.7.11", + "urlpattern-polyfill": "^10.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/node-fetch": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.17.tgz", + "integrity": "sha512-Ni8A2H/r6brNf4u8Y7ATxmWUD0xltsQ6a4NnjWSbw4PgaT34CbY+u4QtVsFj9pTC3dBKJADKjac3AieAig+PZA==", + "license": "MIT", + "dependencies": { + "@whatwg-node/disposablestack": "^0.0.6", + "@whatwg-node/promise-helpers": "^1.2.5", + "busboy": "^1.6.0", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@whatwg-node/promise-helpers": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.0.tgz", + "integrity": "sha512-486CouizxHXucj8Ky153DDragfkMcHtVEToF5Pn/fInhUUSiCmt9Q4JVBa6UK5q4RammFBtGQ4C9qhGlXU9YbA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/any-signal": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz", + "integrity": "sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/apisauce": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/apisauce/-/apisauce-2.1.6.tgz", + "integrity": "sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg==", + "license": "MIT", + "dependencies": { + "axios": "^0.21.4" + } + }, + "node_modules/apisauce/node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/app-module-path": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", + "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==", + "license": "BSD-2-Clause" + }, + "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==", + "license": "Python-2.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/assemblyscript": { + "version": "0.19.23", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.19.23.tgz", + "integrity": "sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA==", + "license": "Apache-2.0", + "dependencies": { + "binaryen": "102.0.0-nightly.20211028", + "long": "^5.2.0", + "source-map-support": "^0.5.20" + }, + "bin": { + "asc": "bin/asc", + "asinit": "bin/asinit" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/assemblyscript" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/binaryen": { + "version": "102.0.0-nightly.20211028", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz", + "integrity": "sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w==", + "license": "Apache-2.0", + "bin": { + "wasm-opt": "bin/wasm-opt" + } + }, + "node_modules/blob-to-it": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-2.0.8.tgz", + "integrity": "sha512-1MKnG2ul1DtSgrxFHqhdJgIJODJbNj7alOLSJRD7O9S2iCJ72ZWU6j8+CVpjIdLueqwpWhy4ouvpanYlFLqkRw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "browser-readablestream-to-it": "^2.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-readablestream-to-it": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.8.tgz", + "integrity": "sha512-+aDq+8QoTxIklc9m21oVg96Bm18EpeVke4/8vWPNu+9Ktd+G4PYavitE4gv/pjIndw1q+vxE/Rcnv1zYHrEQbQ==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/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==", + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cborg": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.2.9.tgz", + "integrity": "sha512-HG8GprGhfzkbzDAIQApqYcN1BJAyf8vDQbzclAwaqrm3ATFnB7ygiWLr+YID+GBdfTJ+yHtzPi06218xULpZrg==", + "license": "Apache-2.0", + "bin": { + "cborg": "lib/bin.js" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/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==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/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==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/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==", + "license": "MIT" + }, + "node_modules/chalk/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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/clean-stack": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", + "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clean-stack/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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "license": "MIT", + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dag-jose": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/dag-jose/-/dag-jose-5.1.1.tgz", + "integrity": "sha512-9alfZ8Wh1XOOMel8bMpDqWsDT72ojFQCJPtwZSev9qh4f8GoCV9qrJW8jcOUhcstO8Kfm09FHGo//jqiZq3z9w==", + "license": "(Apache-2.0 OR MIT)", + "dependencies": { + "@ipld/dag-cbor": "^9.0.0", + "multiformats": "~13.1.3" + } + }, + "node_modules/dag-jose/node_modules/multiformats": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz", + "integrity": "sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "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==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/docker-compose": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-1.1.1.tgz", + "integrity": "sha512-UkIUz0LtzuO17Ijm6SXMGtfZMs7IvbNwvuJBiBuN93PIhr/n9/sbJMqpvYFaCBGfwu1ZM4PPPDgQzeeke4lEoA==", + "license": "MIT", + "dependencies": { + "yaml": "^2.2.2" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/docker-compose/node_modules/yaml": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-fetch": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz", + "integrity": "sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==", + "license": "MIT", + "dependencies": { + "encoding": "^0.1.13" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "engines": { + "node": "> 0.1.90" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "license": "MIT", + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs-extra": { + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", + "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-jetpack": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz", + "integrity": "sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ==", + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.2", + "rimraf": "^2.6.3" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", + "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "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==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gluegun": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gluegun/-/gluegun-5.2.0.tgz", + "integrity": "sha512-jSUM5xUy2ztYFQANne17OUm/oAd7qSX7EBksS9bQDt9UvLPqcEkeWUebmaposb8Tx7eTTD8uJVWGRe6PYSsYkg==", + "license": "MIT", + "dependencies": { + "apisauce": "^2.1.5", + "app-module-path": "^2.2.0", + "cli-table3": "0.6.0", + "colors": "1.4.0", + "cosmiconfig": "7.0.1", + "cross-spawn": "7.0.3", + "ejs": "3.1.8", + "enquirer": "2.3.6", + "execa": "5.1.1", + "fs-jetpack": "4.3.1", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.lowercase": "^4.3.0", + "lodash.lowerfirst": "^4.3.1", + "lodash.pad": "^4.5.1", + "lodash.padend": "^4.6.1", + "lodash.padstart": "^4.6.1", + "lodash.repeat": "^4.1.0", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.trim": "^4.5.1", + "lodash.trimend": "^4.5.1", + "lodash.trimstart": "^4.5.1", + "lodash.uppercase": "^4.3.0", + "lodash.upperfirst": "^4.3.1", + "ora": "4.0.2", + "pluralize": "^8.0.0", + "semver": "7.3.5", + "which": "2.0.2", + "yargs-parser": "^21.0.0" + }, + "bin": { + "gluegun": "bin/gluegun" + } + }, + "node_modules/gluegun/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==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/gluegun/node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gluegun/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gluegun/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphql": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz", + "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==", + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-import-node": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/graphql-import-node/-/graphql-import-node-0.0.5.tgz", + "integrity": "sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q==", + "license": "MIT", + "peerDependencies": { + "graphql": "*" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashlru": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", + "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==", + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-call": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", + "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", + "license": "ISC", + "dependencies": { + "content-type": "^1.0.4", + "debug": "^4.1.1", + "is-retry-allowed": "^1.1.0", + "is-stream": "^2.0.0", + "parse-json": "^4.0.0", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/interface-datastore": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.1.tgz", + "integrity": "sha512-3r0ETmHIi6HmvM5sc09QQiCD3gUfwtEM/AAChOyAd/UAKT69uk8LXfTSUBufbUIO/dU65Vj8nb9O6QjwW8vDSQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^6.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/interface-store": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.2.tgz", + "integrity": "sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/ipfs-unixfs": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.2.1.tgz", + "integrity": "sha512-gUeeX63EFgiaMgcs0cUs2ZUPvlOeEZ38okjK8twdWGZX2jYd2rCk8k/TJ3DSRIDZ2t/aZMv6I23guxHaofZE3w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.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==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/iso-url": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz", + "integrity": "sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/it-all": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.7.tgz", + "integrity": "sha512-PkuYtu6XhJzuPTKXImd6y0qE6H91MUPV/b9xotXMAI6GjmD2v3NoHj2g5L0lS2qZ0EzyGWZU1kp0UxW8POvNBQ==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-first": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.7.tgz", + "integrity": "sha512-e2dVSlOP+pAxPYPVJBF4fX7au8cvGfvLhIrGCMc5aWDnCvwgOo94xHbi3Da6eXQ2jPL5FGEM8sJMn5uE8Seu+g==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-glob": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-3.0.2.tgz", + "integrity": "sha512-yw6am0buc9W6HThDhlf/0k9LpwK31p9Y3c0hpaoth9Iaha4Kog2oRlVanLGSrPPoh9yGwHJbs+KfBJt020N6/g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "fast-glob": "^3.3.3" + } + }, + "node_modules/it-last": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.7.tgz", + "integrity": "sha512-qG4BTveE6Wzsz5voqaOtZAfZgXTJT+yiaj45vp5S0Vi8oOdgKlRqUeolfvWoMCJ9vwSc/z9pAaNYIza7gA851w==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-map": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.2.tgz", + "integrity": "sha512-G3dzFUjTYHKumJJ8wa9dSDS3yKm8L7qDUnAgzemOD0UMztwm54Qc2v97SuUCiAgbOz/aibkSLImfoFK09RlSFQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-peekable": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.6.tgz", + "integrity": "sha512-odk9wn8AwFQipy8+tFaZNRCM62riraKZJRysfbmOett9wgJumCwgZFzWUBUwMoiQapEcEVGwjDpMChZIi+zLuQ==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-pushable": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.0" + } + }, + "node_modules/it-pushable/node_modules/p-defer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", + "integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/it-stream-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz", + "integrity": "sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-to-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz", + "integrity": "sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "fast-fifo": "^1.0.0", + "get-iterator": "^1.0.2", + "p-defer": "^3.0.0", + "p-fifo": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/jackspeak": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", + "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.3.tgz", + "integrity": "sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ==", + "license": "MIT", + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "license": "(MIT OR Apache-2.0)", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/kubo-rpc-client": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kubo-rpc-client/-/kubo-rpc-client-5.1.0.tgz", + "integrity": "sha512-yTBoyEN1Ymwi0Tzi8+Mfxylg3BRAatzykih8jzwaJjfYCqKUEqCX+43m4X78CdTPRXyIHUbdI9N0DcKRwNwk+A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-cbor": "^9.0.0", + "@ipld/dag-json": "^10.0.0", + "@ipld/dag-pb": "^4.0.0", + "@libp2p/crypto": "^5.0.0", + "@libp2p/interface": "^2.0.0", + "@libp2p/logger": "^5.0.0", + "@libp2p/peer-id": "^5.0.0", + "@multiformats/multiaddr": "^12.2.1", + "@multiformats/multiaddr-to-uri": "^11.0.0", + "any-signal": "^4.1.1", + "blob-to-it": "^2.0.5", + "browser-readablestream-to-it": "^2.0.5", + "dag-jose": "^5.0.0", + "electron-fetch": "^1.9.1", + "err-code": "^3.0.1", + "ipfs-unixfs": "^11.1.4", + "iso-url": "^1.2.1", + "it-all": "^3.0.4", + "it-first": "^3.0.4", + "it-glob": "^3.0.1", + "it-last": "^3.0.4", + "it-map": "^3.0.5", + "it-peekable": "^3.0.3", + "it-to-stream": "^1.0.0", + "merge-options": "^3.0.4", + "multiformats": "^13.1.0", + "nanoid": "^5.0.7", + "native-fetch": "^4.0.2", + "parse-duration": "^2.1.2", + "react-native-fetch-api": "^3.0.0", + "stream-to-it": "^1.0.1", + "uint8arrays": "^5.0.3", + "wherearewe": "^2.0.1" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "license": "MIT" + }, + "node_modules/lodash.lowercase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz", + "integrity": "sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA==", + "license": "MIT" + }, + "node_modules/lodash.lowerfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz", + "integrity": "sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w==", + "license": "MIT" + }, + "node_modules/lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", + "license": "MIT" + }, + "node_modules/lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", + "license": "MIT" + }, + "node_modules/lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", + "license": "MIT" + }, + "node_modules/lodash.repeat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", + "integrity": "sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw==", + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/lodash.trim": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz", + "integrity": "sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==", + "license": "MIT" + }, + "node_modules/lodash.trimend": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz", + "integrity": "sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA==", + "license": "MIT" + }, + "node_modules/lodash.trimstart": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz", + "integrity": "sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ==", + "license": "MIT" + }, + "node_modules/lodash.uppercase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz", + "integrity": "sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA==", + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", + "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/matchstick-as": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/matchstick-as/-/matchstick-as-0.6.0.tgz", + "integrity": "sha512-E36fWsC1AbCkBFt05VsDDRoFvGSdcZg6oZJrtIe/YDBbuFh8SKbR5FcoqDhNWqSN+F7bN/iS2u8Md0SM+4pUpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "wabt": "1.0.24" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch/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==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/multiformats": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", + "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nanoid": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", + "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/native-fetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz", + "integrity": "sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg==", + "license": "MIT", + "peerDependencies": { + "undici": "*" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.0.2.tgz", + "integrity": "sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig==", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/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==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ora/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==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-defer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz", + "integrity": "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-fifo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz", + "integrity": "sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==", + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.0.0", + "p-defer": "^3.0.0" + } + }, + "node_modules/p-queue": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", + "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.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==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-duration": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.4.tgz", + "integrity": "sha512-b98m6MsCh+akxfyoz9w9dt0AlH2dfYLOBss5SdDsr9pkhKNvkWBXU/r8A4ahmIGByBOLV2+4YwfCuFxbDDaGyg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/progress-events": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz", + "integrity": "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, + "node_modules/protons-runtime": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.5.0.tgz", + "integrity": "sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.1" + } + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/react-native-fetch-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz", + "integrity": "sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA==", + "license": "MIT", + "dependencies": { + "p-defer": "^3.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/registry-auth-token": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", + "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.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==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "ISC" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "BSD-3-Clause", + "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==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stream-to-it": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz", + "integrity": "sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-stream-types": "^2.0.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/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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "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==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "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==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uint8-varint": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", + "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/uint8arraylist": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arrays": "^5.0.1" + } + }, + "node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/undici": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.4.0.tgz", + "integrity": "sha512-PUQM3/es3noM24oUn10u3kNNap0AbxESOmnssmW+dOi9yGwlUSi5nTNYl3bNbTkWOF8YZDkx2tCmj9OtQ3iGGw==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/wabt": { + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/wabt/-/wabt-1.0.24.tgz", + "integrity": "sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "wasm-decompile": "bin/wasm-decompile", + "wasm-interp": "bin/wasm-interp", + "wasm-objdump": "bin/wasm-objdump", + "wasm-opcodecnt": "bin/wasm-opcodecnt", + "wasm-strip": "bin/wasm-strip", + "wasm-validate": "bin/wasm-validate", + "wasm2c": "bin/wasm2c", + "wasm2wat": "bin/wasm2wat", + "wat2wasm": "bin/wat2wasm" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weald": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz", + "integrity": "sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "ms": "^3.0.0-canary.1", + "supports-color": "^9.4.0" + } + }, + "node_modules/weald/node_modules/ms": { + "version": "3.0.0-canary.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz", + "integrity": "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==", + "license": "MIT", + "engines": { + "node": ">=12.13" + } + }, + "node_modules/weald/node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/web3-errors": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz", + "integrity": "sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-types": "^1.10.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz", + "integrity": "sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg==", + "license": "LGPL-3.0", + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-utils": "^4.3.3", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-types": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz", + "integrity": "sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw==", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz", + "integrity": "sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.3.1", + "web3-types": "^1.10.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz", + "integrity": "sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.2.0", + "web3-types": "^1.6.0", + "zod": "^3.21.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/wherearewe": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz", + "integrity": "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "is-electron": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.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==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "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==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.24.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", + "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/subgraph/package.json b/subgraph/package.json index 4f123e9..f15c849 100644 --- a/subgraph/package.json +++ b/subgraph/package.json @@ -12,9 +12,7 @@ }, "dependencies": { "@graphprotocol/graph-cli": "0.97.0", - "@graphprotocol/graph-ts": "0.37.0", - "axios": "^1.8.4", - "node-fetch": "^3.3.2" + "@graphprotocol/graph-ts": "0.37.0" }, "devDependencies": { "matchstick-as": "0.6.0" diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index bb2bc83..079fc62 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -94,11 +94,7 @@ export function findChallengedRoots( } export function handleFaultRecord(event: FaultRecordEvent): void { - // get nextChallengeEpoch from transaction input - // nextChallengeEpoch will be second parameter to the function nextProvingPeriod - // so extract second parameter from transaction input - // escape first 5 bytes of function selector then next 32 bytes for first parameter - const nextChallengeEpoch = BigInt.fromI32(event.transaction.input[5 + 32]); + const nextChallengeEpoch = BigInt.fromI32(event.transaction.input[4 + 32]); const setId = event.params.proofSetId; diff --git a/subgraph/yarn.lock b/subgraph/yarn.lock index 9db47b0..05b12f8 100644 --- a/subgraph/yarn.lock +++ b/subgraph/yarn.lock @@ -4,7 +4,7 @@ "@babel/code-frame@^7.0.0": version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: "@babel/helper-validator-identifier" "^7.25.9" @@ -13,24 +13,24 @@ "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== "@chainsafe/is-ip@^2.0.1": version "2.1.0" - resolved "https://registry.yarnpkg.com/@chainsafe/is-ip/-/is-ip-2.1.0.tgz#ba9ac32acd9027698e0b56b91c7af069d28d7931" + resolved "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.1.0.tgz" integrity sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w== "@chainsafe/netmask@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@chainsafe/netmask/-/netmask-2.0.0.tgz#0d4a75f47919f65011da4327a3845c9661f1038a" + resolved "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz" integrity sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg== dependencies: "@chainsafe/is-ip" "^2.0.1" "@float-capital/float-subgraph-uncrashable@0.0.0-internal-testing.5": version "0.0.0-internal-testing.5" - resolved "https://registry.yarnpkg.com/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz#060f98440f6e410812766c5b040952d2d02e2b73" + resolved "https://registry.npmjs.org/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz" integrity sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA== dependencies: "@rescript/std" "9.0.0" @@ -40,7 +40,7 @@ "@graphprotocol/graph-cli@0.97.0": version "0.97.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/graph-cli/-/graph-cli-0.97.0.tgz#9dc4eaf542f7535ee773cc9834bdf3993b9934ca" + resolved "https://registry.npmjs.org/@graphprotocol/graph-cli/-/graph-cli-0.97.0.tgz" integrity sha512-SvijthiWbQEL3HdRDf2ydc4uAUwWJfTKyiXKXkXTtimk/hXNgzf4DuqxZPVQOOq4yx5U18iOCc/TKkTI7xCNjw== dependencies: "@float-capital/float-subgraph-uncrashable" "0.0.0-internal-testing.5" @@ -72,14 +72,14 @@ "@graphprotocol/graph-ts@0.37.0": version "0.37.0" - resolved "https://registry.yarnpkg.com/@graphprotocol/graph-ts/-/graph-ts-0.37.0.tgz#ad5e9bc24a099db336e6488e37d5bd5283501a39" + resolved "https://registry.npmjs.org/@graphprotocol/graph-ts/-/graph-ts-0.37.0.tgz" integrity sha512-3xp/sO8zFDBkX44ydGB87ow5Cyrfr/SAm/cWzIRzUVL7ROw0KUyFBG1xj4KKlMnAod7/RL99zChYquC15H4Oqg== dependencies: assemblyscript "0.27.31" "@inquirer/checkbox@^4.1.5": version "4.1.5" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.5.tgz#891bb32ca98eb6ee2889f71d79722705e2241161" + resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz" integrity sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ== dependencies: "@inquirer/core" "^10.1.10" @@ -90,7 +90,7 @@ "@inquirer/confirm@^5.1.9": version "5.1.9" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.9.tgz#c858b6a3decb458241ec36ca9a9117477338076a" + resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.9.tgz" integrity sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w== dependencies: "@inquirer/core" "^10.1.10" @@ -98,7 +98,7 @@ "@inquirer/core@^10.1.10": version "10.1.10" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.10.tgz#222a374e3768536a1eb0adf7516c436d5f4a291d" + resolved "https://registry.npmjs.org/@inquirer/core/-/core-10.1.10.tgz" integrity sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw== dependencies: "@inquirer/figures" "^1.0.11" @@ -112,7 +112,7 @@ "@inquirer/editor@^4.2.10": version "4.2.10" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.10.tgz#45e399313ee857857248bd539b8e832aa0fb60b3" + resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.10.tgz" integrity sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw== dependencies: "@inquirer/core" "^10.1.10" @@ -121,7 +121,7 @@ "@inquirer/expand@^4.0.12": version "4.0.12" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.12.tgz#1e4554f509a435f966e2b91395a503d77df35c17" + resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.12.tgz" integrity sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw== dependencies: "@inquirer/core" "^10.1.10" @@ -130,12 +130,12 @@ "@inquirer/figures@^1.0.11": version "1.0.11" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.11.tgz#4744e6db95288fea1dead779554859710a959a21" + resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz" integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== "@inquirer/input@^4.1.9": version "4.1.9" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.9.tgz#e93888d48c89bdb7f8e10bdd94572b636375749a" + resolved "https://registry.npmjs.org/@inquirer/input/-/input-4.1.9.tgz" integrity sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA== dependencies: "@inquirer/core" "^10.1.10" @@ -143,7 +143,7 @@ "@inquirer/number@^3.0.12": version "3.0.12" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.12.tgz#e027d27425ee2a81a7ccb9fdc750129edd291067" + resolved "https://registry.npmjs.org/@inquirer/number/-/number-3.0.12.tgz" integrity sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q== dependencies: "@inquirer/core" "^10.1.10" @@ -151,7 +151,7 @@ "@inquirer/password@^4.0.12": version "4.0.12" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.12.tgz#f1a663bc5cf88699643cf6c83626a1ae77e580b5" + resolved "https://registry.npmjs.org/@inquirer/password/-/password-4.0.12.tgz" integrity sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g== dependencies: "@inquirer/core" "^10.1.10" @@ -160,7 +160,7 @@ "@inquirer/prompts@^7.4.1": version "7.4.1" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.4.1.tgz#b9bfbba7384305f1d632aca1b800b2b3c22fbcbf" + resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.1.tgz" integrity sha512-UlmM5FVOZF0gpoe1PT/jN4vk8JmpIWBlMvTL8M+hlvPmzN89K6z03+IFmyeu/oFCenwdwHDr2gky7nIGSEVvlA== dependencies: "@inquirer/checkbox" "^4.1.5" @@ -176,7 +176,7 @@ "@inquirer/rawlist@^4.0.12": version "4.0.12" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.12.tgz#97b9540199590d2b197836ba3a5658addd406479" + resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.12.tgz" integrity sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA== dependencies: "@inquirer/core" "^10.1.10" @@ -185,7 +185,7 @@ "@inquirer/search@^3.0.12": version "3.0.12" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.12.tgz#e86f91ea598ccb39caf9a17762b839a9b950e16d" + resolved "https://registry.npmjs.org/@inquirer/search/-/search-3.0.12.tgz" integrity sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ== dependencies: "@inquirer/core" "^10.1.10" @@ -195,7 +195,7 @@ "@inquirer/select@^4.1.1": version "4.1.1" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.1.1.tgz#0496b913514149171cf6351f0acb6d4243a39fdf" + resolved "https://registry.npmjs.org/@inquirer/select/-/select-4.1.1.tgz" integrity sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q== dependencies: "@inquirer/core" "^10.1.10" @@ -206,12 +206,12 @@ "@inquirer/type@^3.0.6": version "3.0.6" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.6.tgz#2500e435fc2014c5250eec3279f42b70b64089bd" + resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz" integrity sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA== "@ipld/dag-cbor@^9.0.0": version "9.2.2" - resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-9.2.2.tgz#e6f5f5bd1e4f290f2285b51fc969ef806484603a" + resolved "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.2.tgz" integrity sha512-uIEOuruCqKTP50OBWwgz4Js2+LhiBQaxc57cnP71f45b1mHEAo1OCR1Zn/TbvSW/mV1x+JqhacIktkKyaYqhCw== dependencies: cborg "^4.0.0" @@ -219,7 +219,7 @@ "@ipld/dag-json@^10.0.0": version "10.2.3" - resolved "https://registry.yarnpkg.com/@ipld/dag-json/-/dag-json-10.2.3.tgz#bb9de2e869f1c523104c52adc89e1e8bb0db7253" + resolved "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.3.tgz" integrity sha512-itacv1j1hvYgLox2B42Msn70QLzcr0MEo5yGIENuw2SM/lQzq9bmBiMky+kDsIrsqqblKTXcHBZnnmK7D4a6ZQ== dependencies: cborg "^4.0.0" @@ -227,14 +227,14 @@ "@ipld/dag-pb@^4.0.0": version "4.1.3" - resolved "https://registry.yarnpkg.com/@ipld/dag-pb/-/dag-pb-4.1.3.tgz#b572d7978fa548a3a9219f566a80884189261858" + resolved "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.3.tgz" integrity sha512-ueULCaaSCcD+dQga6nKiRr+RSeVgdiYiEPKVUu5iQMNYDN+9osd0KpR3UDd9uQQ+6RWuv9L34SchfEwj7YIbOA== dependencies: multiformats "^13.1.0" "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -246,12 +246,12 @@ "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" - resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== "@libp2p/crypto@^5.0.0", "@libp2p/crypto@^5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@libp2p/crypto/-/crypto-5.1.0.tgz#c12e170d30c9a25ec624a22c009a8efcae2473cf" + resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.0.tgz" integrity sha512-hcmScz9m7Ae7R7b/w3x9DX+i60ZIUVsMmsHyIo0vSlGsxO0+tyM4UKUia5EpSp/i1SB/W1IFXxlURwpiX7R5eQ== dependencies: "@libp2p/interface" "^2.8.0" @@ -264,7 +264,7 @@ "@libp2p/interface@^2.0.0", "@libp2p/interface@^2.8.0": version "2.8.0" - resolved "https://registry.yarnpkg.com/@libp2p/interface/-/interface-2.8.0.tgz#c09d97bb651763f48f59cc90af201ce68ca2b98e" + resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-2.8.0.tgz" integrity sha512-QnIjqqUv2aDiBho6OGcNNhLT3Ac4RKrh41qoQmqG6csMRkUUx/xZMkfFJx3j0wGCIP8GS4sGspkTt4wCpPbSWw== dependencies: "@multiformats/multiaddr" "^12.3.3" @@ -276,7 +276,7 @@ "@libp2p/logger@^5.0.0": version "5.1.14" - resolved "https://registry.yarnpkg.com/@libp2p/logger/-/logger-5.1.14.tgz#30cf5382c2e43e81106d871897ea4e57981f334a" + resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.14.tgz" integrity sha512-rJeEq7iuKMMjel0zzH10dXzcWn4Q2yywbv5vM9B1xTQpkD4uxTbBlQs+EL9+pmwaaQrrriEGqluZOTzHvUzJUg== dependencies: "@libp2p/interface" "^2.8.0" @@ -287,7 +287,7 @@ "@libp2p/peer-id@^5.0.0": version "5.1.1" - resolved "https://registry.yarnpkg.com/@libp2p/peer-id/-/peer-id-5.1.1.tgz#19766e352fe9f494c24430c5bad5a3750687d61c" + resolved "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.1.tgz" integrity sha512-dVpgln2gWybglCC8hiQqyGlyXU7F7ovoOqwnnMs8HxurGEH9QxgmCfxRP4p8s86bQwl1MFbyj0AqYPy/zbKLrA== dependencies: "@libp2p/crypto" "^5.1.0" @@ -297,7 +297,7 @@ "@multiformats/dns@^1.0.3": version "1.0.6" - resolved "https://registry.yarnpkg.com/@multiformats/dns/-/dns-1.0.6.tgz#b8c7de11459a02a5f4e609d35d3cdb95cb6ad152" + resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz" integrity sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw== dependencies: "@types/dns-packet" "^5.6.5" @@ -310,14 +310,14 @@ "@multiformats/multiaddr-to-uri@^11.0.0": version "11.0.0" - resolved "https://registry.yarnpkg.com/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.0.tgz#ec0ee9494f1cfc6ccd5173e61bbb0b6722029e97" + resolved "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.0.tgz" integrity sha512-9RNmlIGwZbBLsHekT50dbt4o4u8Iciw9kGjv+WHiGxQdsJ6xKKjU1+C0Vbas6RilMbaVOAOnEyfNcXbUmTkLxQ== dependencies: "@multiformats/multiaddr" "^12.3.0" "@multiformats/multiaddr@^12.2.1", "@multiformats/multiaddr@^12.3.0", "@multiformats/multiaddr@^12.3.3": version "12.4.0" - resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-12.4.0.tgz#13fca8d68805fe0d0569bdd7d4dce41497503d31" + resolved "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.4.0.tgz" integrity sha512-FL7yBTLijJ5JkO044BGb2msf+uJLrwpD6jD6TkXlbjA9N12+18HT40jvd4o5vL4LOJMc86dPX6tGtk/uI9kYKg== dependencies: "@chainsafe/is-ip" "^2.0.1" @@ -327,63 +327,63 @@ uint8-varint "^2.0.1" uint8arrays "^5.0.0" -"@noble/curves@1.4.2", "@noble/curves@~1.4.0": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" - integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== - dependencies: - "@noble/hashes" "1.4.0" - "@noble/curves@^1.7.0": version "1.8.1" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz" integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== dependencies: "@noble/hashes" "1.7.1" -"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": +"@noble/curves@~1.4.0", "@noble/curves@1.4.2": + version "1.4.2" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/hashes@^1.6.1": + version "1.7.2" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz" + integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== + +"@noble/hashes@~1.4.0", "@noble/hashes@1.4.0": version "1.4.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== "@noble/hashes@1.7.1": version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz" integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== -"@noble/hashes@^1.6.1": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" - integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@oclif/core@4.2.8": - version "4.2.8" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.8.tgz#6e71c76b8ea91064ffc8390a3fd2502c5d32a3db" - integrity sha512-OWv4Va6bERxIhrYcnUGzyhGRqktc64lJO6cZ3UwkzJDpfR8ZrbCxRfKRBBah1i8kzUlOAeAXnpbMBMah3skKwA== +"@oclif/core@^4": + version "4.2.10" + resolved "https://registry.npmjs.org/@oclif/core/-/core-4.2.10.tgz" + integrity sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ== dependencies: ansi-escapes "^4.3.2" - ansis "^3.16.0" + ansis "^3.17.0" clean-stack "^3.0.1" cli-spinners "^2.9.2" debug "^4.4.0" @@ -401,13 +401,13 @@ wordwrap "^1.0.0" wrap-ansi "^7.0.0" -"@oclif/core@^4": - version "4.2.10" - resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.2.10.tgz#31dfb7481c79887c3e672e10c981fcc01fcbaeb3" - integrity sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ== +"@oclif/core@4.2.8": + version "4.2.8" + resolved "https://registry.npmjs.org/@oclif/core/-/core-4.2.8.tgz" + integrity sha512-OWv4Va6bERxIhrYcnUGzyhGRqktc64lJO6cZ3UwkzJDpfR8ZrbCxRfKRBBah1i8kzUlOAeAXnpbMBMah3skKwA== dependencies: ansi-escapes "^4.3.2" - ansis "^3.17.0" + ansis "^3.16.0" clean-stack "^3.0.1" cli-spinners "^2.9.2" debug "^4.4.0" @@ -427,7 +427,7 @@ "@oclif/plugin-autocomplete@^3.2.11": version "3.2.27" - resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.27.tgz#a3fee35507c651f2820aff3d7d975f09ec08aa07" + resolved "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.27.tgz" integrity sha512-Aywx0Vw36k0fQVBa2uLb8FKblGAP7ly1cQ5bdKqL4BmhJnUasy37tpyIDMUor93asOS+kKFQg+52pOxQgXHi1A== dependencies: "@oclif/core" "^4" @@ -437,7 +437,7 @@ "@oclif/plugin-not-found@^3.2.29": version "3.2.49" - resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-3.2.49.tgz#d083e0ff6d779137b665562011f1f3b5cd4b34c8" + resolved "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.49.tgz" integrity sha512-3V74/O5aFAqTTCJ7+X04M6vmt59Dk8HimB2uOlGgJrR7yLMW9JsVWKpDZZ6fl1hfd5kK9Jn4oaEt/1LuwfW1wQ== dependencies: "@inquirer/prompts" "^7.4.1" @@ -447,7 +447,7 @@ "@oclif/plugin-warn-if-update-available@^3.1.24": version "3.1.38" - resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.38.tgz#331f9ed8d6e9e36919c0814b24c8c9adbfe2acc4" + resolved "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.38.tgz" integrity sha512-lwYtVXdQaBJV94DglPu140Bc6NmmysHhX5PZtdxeNcUG2BgSX/Sre7oCzMEgmuhe4Lu2jDviMxTX81a8wv6v1w== dependencies: "@oclif/core" "^4" @@ -459,24 +459,24 @@ "@pinax/graph-networks-registry@^0.6.5": version "0.6.7" - resolved "https://registry.yarnpkg.com/@pinax/graph-networks-registry/-/graph-networks-registry-0.6.7.tgz#ceb994f3b31e2943b9c9d9b09dd86eb00d067c0e" + resolved "https://registry.npmjs.org/@pinax/graph-networks-registry/-/graph-networks-registry-0.6.7.tgz" integrity sha512-xogeCEZ50XRMxpBwE3TZjJ8RCO8Guv39gDRrrKtlpDEDEMLm0MzD3A0SQObgj7aF7qTZNRTWzsuvQdxgzw25wQ== "@pnpm/config.env-replace@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== "@pnpm/network.ca-file@^1.0.1": version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== dependencies: graceful-fs "4.2.10" "@pnpm/npm-conf@^2.1.0": version "2.3.1" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== dependencies: "@pnpm/config.env-replace" "^1.1.0" @@ -485,17 +485,17 @@ "@rescript/std@9.0.0": version "9.0.0" - resolved "https://registry.yarnpkg.com/@rescript/std/-/std-9.0.0.tgz#df53f3fa5911cb4e85bd66b92e9e58ddf3e4a7e1" + resolved "https://registry.npmjs.org/@rescript/std/-/std-9.0.0.tgz" integrity sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ== "@scure/base@~1.1.6": version "1.1.9" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz" integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== "@scure/bip32@1.4.0": version "1.4.0" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz" integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== dependencies: "@noble/curves" "~1.4.0" @@ -504,7 +504,7 @@ "@scure/bip39@1.3.0": version "1.3.0" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz" integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== dependencies: "@noble/hashes" "~1.4.0" @@ -512,45 +512,45 @@ "@types/connect@^3.4.33": version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/dns-packet@^5.6.5": version "5.6.5" - resolved "https://registry.yarnpkg.com/@types/dns-packet/-/dns-packet-5.6.5.tgz#49fc29a40f5d30227ed028fa1ee82601d3745e15" + resolved "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz" integrity sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q== dependencies: "@types/node" "*" -"@types/node@*": +"@types/node@*", "@types/node@>=18": version "22.14.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f" + resolved "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz" integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== dependencies: undici-types "~6.21.0" "@types/node@^12.12.54": version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/parse-json@^4.0.0": version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/ws@^7.4.4": version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== dependencies: "@types/node" "*" "@whatwg-node/disposablestack@^0.0.6": version "0.0.6" - resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" + resolved "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz" integrity sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw== dependencies: "@whatwg-node/promise-helpers" "^1.0.0" @@ -558,7 +558,7 @@ "@whatwg-node/fetch@^0.10.1": version "0.10.5" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.5.tgz#8537e50d32bac0f2e9cecff206588ca41d836df5" + resolved "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.5.tgz" integrity sha512-+yFJU3hmXPAHJULwx0VzCIsvr/H0lvbPvbOH3areOH3NAuCxCwaJsQ8w6/MwwMcvEWIynSsmAxoyaH04KeosPg== dependencies: "@whatwg-node/node-fetch" "^0.7.11" @@ -566,7 +566,7 @@ "@whatwg-node/node-fetch@^0.7.11": version "0.7.17" - resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.7.17.tgz#86adaaddf06d7d098f17dfa504cd91562d81f89e" + resolved "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.17.tgz" integrity sha512-Ni8A2H/r6brNf4u8Y7ATxmWUD0xltsQ6a4NnjWSbw4PgaT34CbY+u4QtVsFj9pTC3dBKJADKjac3AieAig+PZA== dependencies: "@whatwg-node/disposablestack" "^0.0.6" @@ -576,105 +576,97 @@ "@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.5": version "1.3.0" - resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.0.tgz#33629c853cfa309009b1329d3cb6208241ec2bf0" + resolved "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.0.tgz" integrity sha512-486CouizxHXucj8Ky153DDragfkMcHtVEToF5Pn/fInhUUSiCmt9Q4JVBa6UK5q4RammFBtGQ4C9qhGlXU9YbA== dependencies: tslib "^2.6.3" -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - abitype@0.7.1: version "0.7.1" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.7.1.tgz#16db20abe67de80f6183cf75f3de1ff86453b745" + resolved "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz" integrity sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ== ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.3.2: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" ansi-regex@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" 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" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansis@^3.16.0, ansis@^3.17.0: version "3.17.0" - resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" + resolved "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz" integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== any-signal@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-4.1.1.tgz#928416c355c66899e6b2a91cad4488f0324bae03" + resolved "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz" integrity sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA== apisauce@^2.1.5: version "2.1.6" - resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-2.1.6.tgz#94887f335bf3d735305fc895c8a191c9c2608a7f" + resolved "https://registry.npmjs.org/apisauce/-/apisauce-2.1.6.tgz" integrity sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg== dependencies: axios "^0.21.4" app-module-path@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + resolved "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz" integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== assemblyscript@0.19.23: version "0.19.23" - resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" + resolved "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.19.23.tgz" integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== dependencies: binaryen "102.0.0-nightly.20211028" @@ -683,7 +675,7 @@ assemblyscript@0.19.23: assemblyscript@0.27.31: version "0.27.31" - resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.27.31.tgz#07412b1bc42c67f78080dbaddca030ab74d3b9b2" + resolved "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.31.tgz" integrity sha512-Ra8kiGhgJQGZcBxjtMcyVRxOEJZX64kd+XGpjWzjcjgxWJVv+CAQO0aDBk4GQVhjYbOkATarC83mHjAVGtwPBQ== dependencies: binaryen "116.0.0-nightly.20240114" @@ -691,67 +683,53 @@ assemblyscript@0.27.31: async@^3.2.3: version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== -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== - available-typed-arrays@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" axios@^0.21.4: version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" -axios@^1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" - integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== binaryen@102.0.0-nightly.20211028: version "102.0.0-nightly.20211028" - resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" + resolved "https://registry.npmjs.org/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz" integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== binaryen@116.0.0-nightly.20240114: version "116.0.0-nightly.20240114" - resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz#ad8bfbde77d4cb4715b93997114eefc30f45155b" + resolved "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz" integrity sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A== blob-to-it@^2.0.5: version "2.0.8" - resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-2.0.8.tgz#6656f7d11244b8e58cc92e0db2407e652e1336b9" + resolved "https://registry.npmjs.org/blob-to-it/-/blob-to-it-2.0.8.tgz" integrity sha512-1MKnG2ul1DtSgrxFHqhdJgIJODJbNj7alOLSJRD7O9S2iCJ72ZWU6j8+CVpjIdLueqwpWhy4ouvpanYlFLqkRw== dependencies: browser-readablestream-to-it "^2.0.0" brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -759,31 +737,31 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browser-readablestream-to-it@^2.0.0, browser-readablestream-to-it@^2.0.5: version "2.0.8" - resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.8.tgz#997c0673556de5c6b02f8974211213d45df4ba71" + resolved "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.8.tgz" integrity sha512-+aDq+8QoTxIklc9m21oVg96Bm18EpeVke4/8vWPNu+9Ktd+G4PYavitE4gv/pjIndw1q+vxE/Rcnv1zYHrEQbQ== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^6.0.3: version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -791,21 +769,21 @@ buffer@^6.0.3: bundle-name@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== dependencies: run-applescript "^7.0.0" busboy@^1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== dependencies: streamsearch "^1.1.0" call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -813,7 +791,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -823,7 +801,7 @@ call-bind@^1.0.8: call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -831,17 +809,17 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== cborg@^4.0.0: version "4.2.9" - resolved "https://registry.yarnpkg.com/cborg/-/cborg-4.2.9.tgz#e3a7fbade47b55676322463c2f8ce7a0b64afa61" + resolved "https://registry.npmjs.org/cborg/-/cborg-4.2.9.tgz" integrity sha512-HG8GprGhfzkbzDAIQApqYcN1BJAyf8vDQbzclAwaqrm3ATFnB7ygiWLr+YID+GBdfTJ+yHtzPi06218xULpZrg== chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -850,7 +828,7 @@ chalk@^2.4.2: chalk@^4.0.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -858,38 +836,38 @@ chalk@^4.0.2: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== chokidar@4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: readdirp "^4.0.1" clean-stack@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz" integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== dependencies: escape-string-regexp "4.0.0" cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.2.0, cli-spinners@^2.9.2: version "2.9.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-table3@0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== dependencies: object-assign "^4.1.0" @@ -899,63 +877,56 @@ cli-table3@0.6.0: cli-width@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colors@1.4.0, colors@^1.1.2: +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +colors@^1.1.2, colors@1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - commander@^2.20.3: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== config-chain@^1.1.11: version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" @@ -963,12 +934,12 @@ config-chain@^1.1.11: content-type@^1.0.4: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cosmiconfig@7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" @@ -977,19 +948,19 @@ cosmiconfig@7.0.1: path-type "^4.0.0" yaml "^1.10.0" -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== +cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -cross-spawn@^7.0.3, cross-spawn@^7.0.6: - version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== +cross-spawn@7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -997,32 +968,27 @@ cross-spawn@^7.0.3, cross-spawn@^7.0.6: dag-jose@^5.0.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/dag-jose/-/dag-jose-5.1.1.tgz#02708321f14b6f43990e238010c73464916259a7" + resolved "https://registry.npmjs.org/dag-jose/-/dag-jose-5.1.1.tgz" integrity sha512-9alfZ8Wh1XOOMel8bMpDqWsDT72ojFQCJPtwZSev9qh4f8GoCV9qrJW8jcOUhcstO8Kfm09FHGo//jqiZq3z9w== dependencies: "@ipld/dag-cbor" "^9.0.0" multiformats "~13.1.3" -data-uri-to-buffer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" - integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== - -debug@4.4.0, debug@^4.1.1, debug@^4.4.0: +debug@^4.1.1, debug@^4.4.0, debug@4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: ms "^2.1.3" default-browser-id@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz" integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== default-browser@^5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz" integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== dependencies: bundle-name "^4.1.0" @@ -1030,14 +996,14 @@ default-browser@^5.2.1: defaults@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1046,43 +1012,38 @@ define-data-property@^1.1.4: define-lazy-prop@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== delay@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== -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== - dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dns-packet@^5.6.1: version "5.6.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" docker-compose@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-1.1.1.tgz#c480b5db9d7bd3d0d1259774831ef018ec116743" + resolved "https://registry.npmjs.org/docker-compose/-/docker-compose-1.1.1.tgz" integrity sha512-UkIUz0LtzuO17Ijm6SXMGtfZMs7IvbNwvuJBiBuN93PIhr/n9/sbJMqpvYFaCBGfwu1ZM4PPPDgQzeeke4lEoA== dependencies: yaml "^2.2.2" dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" @@ -1091,118 +1052,108 @@ dunder-proto@^1.0.1: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ejs@3.1.8: - version "3.1.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" - integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== - dependencies: - jake "^10.8.5" - ejs@^3.1.10: version "3.1.10" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz" integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== dependencies: jake "^10.8.5" +ejs@3.1.8: + version "3.1.8" + resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== + dependencies: + jake "^10.8.5" + electron-fetch@^1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.9.1.tgz#e28bfe78d467de3f2dec884b1d72b8b05322f30f" + resolved "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz" integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== dependencies: encoding "^0.1.13" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encoding@^0.1.13: version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" enquirer@2.3.6: version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" err-code@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" + resolved "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz" integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - es6-promise@^4.0.3: version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== dependencies: es6-promise "^4.0.3" -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== - escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== +escape-string-regexp@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + ethereum-cryptography@^2.0.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz" integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== dependencies: "@noble/curves" "1.4.2" @@ -1212,12 +1163,12 @@ ethereum-cryptography@^2.0.0: eventemitter3@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== execa@5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -1232,7 +1183,7 @@ execa@5.1.1: external-editor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -1241,17 +1192,17 @@ external-editor@^3.1.0: eyes@^0.1.8: version "0.1.8" - resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== fast-fifo@^1.0.0: version "1.3.2" - resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== fast-glob@^3.2.9, fast-glob@^3.3.3: version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -1262,85 +1213,60 @@ fast-glob@^3.2.9, fast-glob@^3.3.3: fast-levenshtein@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz" integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== dependencies: fastest-levenshtein "^1.0.7" fastest-levenshtein@^1.0.7: version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: version "1.19.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" -fetch-blob@^3.1.2, fetch-blob@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" - integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== - dependencies: - node-domexception "^1.0.0" - web-streams-polyfill "^3.0.3" - filelist@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" -follow-redirects@^1.14.0, follow-redirects@^1.15.6: +follow-redirects@^1.14.0: version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== for-each@^0.3.5: version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" foreground-child@^3.1.0: version "3.3.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: cross-spawn "^7.0.6" signal-exit "^4.0.1" -form-data@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" - integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - mime-types "^2.1.12" - -formdata-polyfill@^4.0.10: - version "4.0.10" - resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" - integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== - dependencies: - fetch-blob "^3.1.2" - fs-extra@11.3.0: version "11.3.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz" integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" @@ -1349,7 +1275,7 @@ fs-extra@11.3.0: fs-jetpack@4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-4.3.1.tgz#cdfd4b64e6bfdec7c7dc55c76b39efaa7853bb20" + resolved "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz" integrity sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ== dependencies: minimatch "^3.0.2" @@ -1357,17 +1283,17 @@ fs-jetpack@4.3.1: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -1383,17 +1309,17 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: get-iterator@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" + resolved "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz" integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== 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" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -1401,31 +1327,19 @@ get-proto@^1.0.0, get-proto@^1.0.1: get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.1.tgz#1c3aef9a59d680e611b53dcd24bb8639cef064d9" - integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^4.0.1" - minimatch "^10.0.0" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^2.0.0" - glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -1435,9 +1349,21 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@11.0.1: + version "11.0.1" + resolved "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz" + integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -1449,7 +1375,7 @@ globby@^11.1.0: gluegun@5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/gluegun/-/gluegun-5.2.0.tgz#88ba1f76f20e68a135557a4a4c8ea283291a7491" + resolved "https://registry.npmjs.org/gluegun/-/gluegun-5.2.0.tgz" integrity sha512-jSUM5xUy2ztYFQANne17OUm/oAd7qSX7EBksS9bQDt9UvLPqcEkeWUebmaposb8Tx7eTTD8uJVWGRe6PYSsYkg== dependencies: apisauce "^2.1.5" @@ -1485,73 +1411,73 @@ gluegun@5.2.0: gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + graphql-import-node@^0.0.5: version "0.0.5" - resolved "https://registry.yarnpkg.com/graphql-import-node/-/graphql-import-node-0.0.5.tgz#caf76a6cece10858b14f27cce935655398fc1bf0" + resolved "https://registry.npmjs.org/graphql-import-node/-/graphql-import-node-0.0.5.tgz" integrity sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q== -graphql@16.10.0, graphql@^16.6.0: +graphql@*, graphql@^16.6.0, graphql@16.10.0: version "16.10.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.10.0.tgz#24c01ae0af6b11ea87bf55694429198aaa8e220c" + resolved "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz" integrity sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hashlru@^2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/hashlru/-/hashlru-2.3.0.tgz#5dc15928b3f6961a2056416bb3a4910216fdfb51" + resolved "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz" integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" http-call@^5.2.2: version "5.3.0" - resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" + resolved "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz" integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== dependencies: content-type "^1.0.4" @@ -1563,41 +1489,41 @@ http-call@^5.2.2: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== iconv-lite@^0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immutable@5.0.3: version "5.0.3" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.0.3.tgz#aa037e2313ea7b5d400cd9298fa14e404c933db1" + resolved "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz" integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -1605,30 +1531,30 @@ import-fresh@^3.2.1: indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3: +inherits@^2.0.3, inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^1.3.4: version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== interface-datastore@^8.3.1: version "8.3.1" - resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.3.1.tgz#c793f990c5cf078a24a8a2ded13f7e2099a2a282" + resolved "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.1.tgz" integrity sha512-3r0ETmHIi6HmvM5sc09QQiCD3gUfwtEM/AAChOyAd/UAKT69uk8LXfTSUBufbUIO/dU65Vj8nb9O6QjwW8vDSQ== dependencies: interface-store "^6.0.0" @@ -1636,12 +1562,12 @@ interface-datastore@^8.3.1: interface-store@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-6.0.2.tgz#1746a1ee07634f7678b3aa778738b79e3f75c909" + resolved "https://registry.npmjs.org/interface-store/-/interface-store-6.0.2.tgz" integrity sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA== ipfs-unixfs@^11.1.4: version "11.2.1" - resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-11.2.1.tgz#679adc00cdfd37b55ce5318715efa19051a300b4" + resolved "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.2.1.tgz" integrity sha512-gUeeX63EFgiaMgcs0cUs2ZUPvlOeEZ38okjK8twdWGZX2jYd2rCk8k/TJ3DSRIDZ2t/aZMv6I23guxHaofZE3w== dependencies: protons-runtime "^5.5.0" @@ -1649,7 +1575,7 @@ ipfs-unixfs@^11.1.4: is-arguments@^1.0.4: version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz" integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: call-bound "^1.0.2" @@ -1657,42 +1583,42 @@ is-arguments@^1.0.4: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-docker@^2.0.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-docker@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-electron@^2.2.0: version "2.2.2" - resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" + resolved "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz" integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-function@^1.0.7: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz" integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: call-bound "^1.0.3" @@ -1702,36 +1628,36 @@ is-generator-function@^1.0.7: is-glob@^4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-inside-container@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== dependencies: is-docker "^3.0.0" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-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" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== is-regex@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: call-bound "^1.0.2" @@ -1741,99 +1667,99 @@ is-regex@^1.2.1: is-retry-allowed@^1.1.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-typed-array@^1.1.3: version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" is-wsl@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz" integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== dependencies: is-inside-container "^1.0.0" isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iso-url@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" + resolved "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz" integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== isomorphic-ws@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== it-all@^3.0.4: version "3.0.7" - resolved "https://registry.yarnpkg.com/it-all/-/it-all-3.0.7.tgz#04cf8605d51ca9db19d0e45ff0258abb97665d98" + resolved "https://registry.npmjs.org/it-all/-/it-all-3.0.7.tgz" integrity sha512-PkuYtu6XhJzuPTKXImd6y0qE6H91MUPV/b9xotXMAI6GjmD2v3NoHj2g5L0lS2qZ0EzyGWZU1kp0UxW8POvNBQ== it-first@^3.0.4: version "3.0.7" - resolved "https://registry.yarnpkg.com/it-first/-/it-first-3.0.7.tgz#f91f1036229e3c9889004f98fdeecc8681d5e72c" + resolved "https://registry.npmjs.org/it-first/-/it-first-3.0.7.tgz" integrity sha512-e2dVSlOP+pAxPYPVJBF4fX7au8cvGfvLhIrGCMc5aWDnCvwgOo94xHbi3Da6eXQ2jPL5FGEM8sJMn5uE8Seu+g== it-glob@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-3.0.2.tgz#32a17aca775eb8eb77716079b3bc16e6f016b141" + resolved "https://registry.npmjs.org/it-glob/-/it-glob-3.0.2.tgz" integrity sha512-yw6am0buc9W6HThDhlf/0k9LpwK31p9Y3c0hpaoth9Iaha4Kog2oRlVanLGSrPPoh9yGwHJbs+KfBJt020N6/g== dependencies: fast-glob "^3.3.3" it-last@^3.0.4: version "3.0.7" - resolved "https://registry.yarnpkg.com/it-last/-/it-last-3.0.7.tgz#bdd6864b4915cafe3fc41823de06fe65ff548643" + resolved "https://registry.npmjs.org/it-last/-/it-last-3.0.7.tgz" integrity sha512-qG4BTveE6Wzsz5voqaOtZAfZgXTJT+yiaj45vp5S0Vi8oOdgKlRqUeolfvWoMCJ9vwSc/z9pAaNYIza7gA851w== it-map@^3.0.5: version "3.1.2" - resolved "https://registry.yarnpkg.com/it-map/-/it-map-3.1.2.tgz#64d6bd44caade9175f0419c0ae55c30d6cfcf88c" + resolved "https://registry.npmjs.org/it-map/-/it-map-3.1.2.tgz" integrity sha512-G3dzFUjTYHKumJJ8wa9dSDS3yKm8L7qDUnAgzemOD0UMztwm54Qc2v97SuUCiAgbOz/aibkSLImfoFK09RlSFQ== dependencies: it-peekable "^3.0.0" it-peekable@^3.0.0, it-peekable@^3.0.3: version "3.0.6" - resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-3.0.6.tgz#f84c81f4ee301048fbdf4a500b3a14a5cbb44cec" + resolved "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.6.tgz" integrity sha512-odk9wn8AwFQipy8+tFaZNRCM62riraKZJRysfbmOett9wgJumCwgZFzWUBUwMoiQapEcEVGwjDpMChZIi+zLuQ== it-pushable@^3.2.3: version "3.2.3" - resolved "https://registry.yarnpkg.com/it-pushable/-/it-pushable-3.2.3.tgz#e2b80aed90cfbcd54b620c0a0785e546d4e5f334" + resolved "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz" integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== dependencies: p-defer "^4.0.0" it-stream-types@^2.0.1, it-stream-types@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/it-stream-types/-/it-stream-types-2.0.2.tgz#60bbace90096796b4e6cc3bfab99cf9f2b86c152" + resolved "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz" integrity sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww== it-to-stream@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" + resolved "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz" integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== dependencies: buffer "^6.0.3" @@ -1845,14 +1771,14 @@ it-to-stream@^1.0.0: jackspeak@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.0.tgz#c489c079f2b636dc4cbe9b0312a13ff1282e561b" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz" integrity sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw== dependencies: "@isaacs/cliui" "^8.0.2" jake@^10.8.5: version "10.9.2" - resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz" integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== dependencies: async "^3.2.3" @@ -1862,52 +1788,52 @@ jake@^10.8.5: jayson@4.1.3: version "4.1.3" - resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.1.3.tgz#db9be2e4287d9fef4fc05b5fe367abe792c2eee8" + resolved "https://registry.npmjs.org/jayson/-/jayson-4.1.3.tgz" integrity sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ== dependencies: "@types/connect" "^3.4.33" "@types/node" "^12.12.54" "@types/ws" "^7.4.4" - JSONStream "^1.3.5" commander "^2.20.3" delay "^5.0.0" es6-promisify "^5.0.0" eyes "^0.1.8" isomorphic-ws "^4.0.1" json-stringify-safe "^5.0.1" + JSONStream "^1.3.5" uuid "^8.3.2" ws "^7.5.10" js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@4.1.0, js-yaml@^4.1.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" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -1916,12 +1842,20 @@ jsonfile@^6.0.1: jsonparse@^1.2.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + kubo-rpc-client@^5.0.2: version "5.1.0" - resolved "https://registry.yarnpkg.com/kubo-rpc-client/-/kubo-rpc-client-5.1.0.tgz#06f9216b2b8a62487a150261b16fd941a75adb34" + resolved "https://registry.npmjs.org/kubo-rpc-client/-/kubo-rpc-client-5.1.0.tgz" integrity sha512-yTBoyEN1Ymwi0Tzi8+Mfxylg3BRAatzykih8jzwaJjfYCqKUEqCX+43m4X78CdTPRXyIHUbdI9N0DcKRwNwk+A== dependencies: "@ipld/dag-cbor" "^9.0.0" @@ -1960,283 +1894,257 @@ kubo-rpc-client@^5.0.2: lilconfig@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lodash.camelcase@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.kebabcase@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== lodash.lowercase@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz#46515aced4acb0b7093133333af068e4c3b14e9d" + resolved "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz" integrity sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA== lodash.lowerfirst@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" + resolved "https://registry.npmjs.org/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz" integrity sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w== lodash.pad@^4.5.1: version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" + resolved "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz" integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== lodash.padend@^4.6.1: version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" + resolved "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz" integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== lodash.padstart@^4.6.1: version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== lodash.repeat@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44" + resolved "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz" integrity sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw== lodash.snakecase@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash.startcase@^4.4.0: version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== lodash.trim@^4.5.1: version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.trim/-/lodash.trim-4.5.1.tgz#36425e7ee90be4aa5e27bcebb85b7d11ea47aa57" + resolved "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz" integrity sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg== lodash.trimend@^4.5.1: version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.trimend/-/lodash.trimend-4.5.1.tgz#12804437286b98cad8996b79414e11300114082f" + resolved "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz" integrity sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA== lodash.trimstart@^4.5.1: version "4.5.1" - resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" + resolved "https://registry.npmjs.org/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz" integrity sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ== lodash.uppercase@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz#c404abfd1469f93931f9bb24cf6cc7d57059bc73" + resolved "https://registry.npmjs.org/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz" integrity sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA== lodash.upperfirst@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== dependencies: chalk "^2.4.2" long@^5.2.0, long@^5.2.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/long/-/long-5.3.1.tgz#9d4222d3213f38a5ec809674834e0f0ab21abe96" + resolved "https://registry.npmjs.org/long/-/long-5.3.1.tgz" integrity sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng== lru-cache@^11.0.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.1.0.tgz#afafb060607108132dbc1cf8ae661afb69486117" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz" integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" matchstick-as@0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/matchstick-as/-/matchstick-as-0.6.0.tgz#c65296b1f51b1014d605c52067d9b5321ea630e8" + resolved "https://registry.npmjs.org/matchstick-as/-/matchstick-as-0.6.0.tgz" integrity sha512-E36fWsC1AbCkBFt05VsDDRoFvGSdcZg6oZJrtIe/YDBbuFh8SKbR5FcoqDhNWqSN+F7bN/iS2u8Md0SM+4pUpw== dependencies: wabt "1.0.24" math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== merge-options@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" + resolved "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz" integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== dependencies: is-plain-obj "^2.1.0" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^10.0.0: version "10.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz" integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== dependencies: brace-expansion "^2.0.1" minimatch@^3.0.2, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^9.0.5: version "9.0.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minipass@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== ms@^3.0.0-canary.1: version "3.0.0-canary.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-3.0.0-canary.1.tgz#c7b34fbce381492fd0b345d1cf56e14d67b77b80" + resolved "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz" integrity sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g== multiformats@^13.0.0, multiformats@^13.1.0, multiformats@^13.3.1: version "13.3.2" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.3.2.tgz#a77c2a09c490e90c73b3049551604e6e1a4854e0" + resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz" integrity sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g== multiformats@~13.1.3: version "13.1.3" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.1.3.tgz#36d312401ff424948ef90746fbda9dd798cffa09" + resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz" integrity sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw== mute-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== nanoid@^5.0.7: version "5.1.5" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.5.tgz#f7597f9d9054eb4da9548cdd53ca70f1790e87de" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz" integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== native-fetch@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-4.0.2.tgz#75c8a44c5f3bb021713e5e24f2846750883e49af" + resolved "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz" integrity sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg== -node-domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" - integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== - -node-fetch@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" - integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== - dependencies: - data-uri-to-buffer "^4.0.0" - fetch-blob "^3.1.4" - formdata-polyfill "^4.0.10" - npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" object-assign@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" open@10.1.0: version "10.1.0" - resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1" + resolved "https://registry.npmjs.org/open/-/open-10.1.0.tgz" integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== dependencies: default-browser "^5.2.1" @@ -2246,7 +2154,7 @@ open@10.1.0: ora@4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.2.tgz#0e1e68fd45b135d28648b27cf08081fa6e8a297d" + resolved "https://registry.npmjs.org/ora/-/ora-4.0.2.tgz" integrity sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig== dependencies: chalk "^2.4.2" @@ -2259,22 +2167,22 @@ ora@4.0.2: os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-defer@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz" integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== p-defer@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-4.0.1.tgz#d12c6d41420785ed0d162dbd86b71ba490f7f99e" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz" integrity sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A== p-fifo@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" + resolved "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz" integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== dependencies: fast-fifo "^1.0.0" @@ -2282,7 +2190,7 @@ p-fifo@^1.0.0: p-queue@^8.0.1: version "8.1.0" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-8.1.0.tgz#d71929249868b10b16f885d8a82beeaf35d32279" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz" integrity sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw== dependencies: eventemitter3 "^5.0.1" @@ -2290,29 +2198,29 @@ p-queue@^8.0.1: p-timeout@^6.1.2: version "6.1.4" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.4.tgz#418e1f4dd833fa96a2e3f532547dd2abdb08dbc2" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz" integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg== package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-duration@^2.1.2: version "2.1.4" - resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-2.1.4.tgz#02918736726f657eaf70b52bb8da7910316df51d" + resolved "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.4.tgz" integrity sha512-b98m6MsCh+akxfyoz9w9dt0AlH2dfYLOBss5SdDsr9pkhKNvkWBXU/r8A4ahmIGByBOLV2+4YwfCuFxbDDaGyg== parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" @@ -2320,7 +2228,7 @@ parse-json@^4.0.0: parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -2330,17 +2238,17 @@ parse-json@^5.0.0: path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-scurry@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz" integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== dependencies: lru-cache "^11.0.0" @@ -2348,73 +2256,68 @@ path-scurry@^2.0.0: path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pluralize@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== possible-typed-array-names@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== prettier@3.5.3: version "3.5.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== progress-events@^1.0.0, progress-events@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/progress-events/-/progress-events-1.0.1.tgz#693b6d4153f08c1418ae3cd5fcad8596c91db7e8" + resolved "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz" integrity sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw== proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== protons-runtime@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-5.5.0.tgz#ea06d9ef843aad77ea5de3e1ebafa81b58c24570" + resolved "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.5.0.tgz" integrity sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA== dependencies: uint8-varint "^2.0.2" uint8arraylist "^2.4.3" uint8arrays "^5.0.1" -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== react-native-fetch-api@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" + resolved "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz" integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== dependencies: p-defer "^3.0.0" readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -2423,24 +2326,24 @@ readable-stream@^3.6.0: readdirp@^4.0.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== registry-auth-token@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" + resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz" integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== dependencies: "@pnpm/npm-conf" "^2.1.0" resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -2448,36 +2351,36 @@ restore-cursor@^3.1.0: reusify@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^2.6.3: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" run-applescript@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz" integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: call-bound "^1.0.2" @@ -2486,24 +2389,24 @@ safe-regex-test@^1.1.0: "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +semver@^7.6.3, semver@7.7.1: + version "7.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + semver@7.3.5: version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -semver@7.7.1, semver@^7.6.3: - version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== - set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -2515,34 +2418,39 @@ set-function-length@^1.2.2: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1, signal-exit@^4.1.0: +signal-exit@^4.0.1: version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== source-map-support@^0.5.20: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + 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" @@ -2550,24 +2458,40 @@ source-map-support@^0.5.20: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== stream-to-it@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-1.0.1.tgz#7d5e1b04bab70facd48273279bfa49f0d0165950" + resolved "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz" integrity sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA== dependencies: it-stream-types "^2.0.1" streamsearch@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^4.0.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" + 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" @@ -2576,123 +2500,128 @@ streamsearch@^1.1.0: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-ansi@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" 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.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-color@^9.4.0: version "9.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== "through@>=2.2.7 <3": version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== tmp-promise@3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" + resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== dependencies: tmp "^0.2.0" tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmp@^0.2.0: version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" tslib@^2.6.3: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +typescript@>=4.9.4: + version "5.8.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + uint8-varint@^2.0.1, uint8-varint@^2.0.2: version "2.0.4" - resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-2.0.4.tgz#85be52b3849eb30f2c3640a2df8a14364180affb" + resolved "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz" integrity sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw== dependencies: uint8arraylist "^2.0.0" @@ -2700,46 +2629,46 @@ uint8-varint@^2.0.1, uint8-varint@^2.0.2: uint8arraylist@^2.0.0, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: version "2.4.8" - resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" + resolved "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz" integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== dependencies: uint8arrays "^5.0.1" uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.0.3, uint8arrays@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.1.0.tgz#14047c9bdf825d025b7391299436e5e50e7270f1" + resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz" integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== dependencies: multiformats "^13.0.0" undici-types@~6.21.0: version "6.21.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici@7.4.0: +undici@*, undici@7.4.0: version "7.4.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-7.4.0.tgz#a2606aa5ceeeaac0ddcc00937586c3bc06bfafdc" + resolved "https://registry.npmjs.org/undici/-/undici-7.4.0.tgz" integrity sha512-PUQM3/es3noM24oUn10u3kNNap0AbxESOmnssmW+dOi9yGwlUSi5nTNYl3bNbTkWOF8YZDkx2tCmj9OtQ3iGGw== universalify@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== urlpattern-polyfill@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec" + resolved "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz" integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util@^0.12.5: version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" @@ -2750,44 +2679,39 @@ util@^0.12.5: uuid@^8.3.2: version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== wabt@1.0.24: version "1.0.24" - resolved "https://registry.yarnpkg.com/wabt/-/wabt-1.0.24.tgz#c02e0b5b4503b94feaf4a30a426ef01c1bea7c6c" + resolved "https://registry.npmjs.org/wabt/-/wabt-1.0.24.tgz" integrity sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg== wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" weald@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/weald/-/weald-1.0.4.tgz#8858cf9186869deba58357ae10cf26eaada80bb0" + resolved "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz" integrity sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ== dependencies: ms "^3.0.0-canary.1" supports-color "^9.4.0" -web-streams-polyfill@^3.0.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" - integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== - web3-errors@^1.2.0, web3-errors@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-errors/-/web3-errors-1.3.1.tgz#163bc4d869f98614760b683d733c3ed1fb415d98" + resolved "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz" integrity sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ== dependencies: web3-types "^1.10.0" web3-eth-abi@4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz#1dca9d80341b3cd7a1ae07dc98080c2073d62a29" + resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz" integrity sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg== dependencies: abitype "0.7.1" @@ -2798,12 +2722,12 @@ web3-eth-abi@4.4.1: web3-types@^1.10.0, web3-types@^1.6.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-types/-/web3-types-1.10.0.tgz#41b0b4d2dd75e919d5b6f37bf139e29f445db04e" + resolved "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz" integrity sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw== web3-utils@^4.3.3: version "4.3.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.3.3.tgz#e380a1c03a050d3704f94bd08c1c9f50a1487205" + resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz" integrity sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw== dependencies: ethereum-cryptography "^2.0.0" @@ -2814,7 +2738,7 @@ web3-utils@^4.3.3: web3-validator@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.6.tgz#a0cdaa39e1d1708ece5fae155b034e29d6a19248" + resolved "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz" integrity sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg== dependencies: ethereum-cryptography "^2.0.0" @@ -2825,14 +2749,14 @@ web3-validator@^2.0.6: wherearewe@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/wherearewe/-/wherearewe-2.0.1.tgz#37c97a7bf112dca8db34bfefb2f6c997af312bb8" + resolved "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz" integrity sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw== dependencies: is-electron "^2.2.0" which-typed-array@^1.1.16, which-typed-array@^1.1.2: version "1.1.19" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz" integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" @@ -2843,28 +2767,28 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.2: gopd "^1.2.0" has-tostringtag "^1.0.2" -which@2.0.2, which@^2.0.1: +which@^2.0.1, which@2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" widest-line@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -2873,16 +2797,25 @@ wordwrap@^1.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" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" 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.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -2891,45 +2824,45 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^7.5.10: +ws@*, ws@^7.5.10: version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== - yaml@^1.10.0: version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.2.2: version "2.7.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.1.tgz#44a247d1b88523855679ac7fa7cda6ed7e135cf6" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz" integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== +yaml@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz" + integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + yargs-parser@^21.0.0: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yoctocolors-cjs@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz" integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== -zod@^3.21.4: +"zod@^3 >=3.19.1", zod@^3.21.4: version "3.24.2" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.24.2.tgz#8efa74126287c675e92f46871cfc8d15c34372b3" + resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz" integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== From 76c2994bfc2b29c4a07d516e8b76ddeb031a9d01 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 18 Apr 2025 02:45:49 +0530 Subject: [PATCH 06/51] add relations between entities --- subgraph/schema.graphql | 77 +- subgraph/src/pdp-service.ts | 279 +++++--- subgraph/src/pdp-verifier.ts | 1292 ++++++++++++++++++++-------------- 3 files changed, 1008 insertions(+), 640 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 1cc767b..8022462 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -1,8 +1,8 @@ type ProofSet @entity(immutable: false) { - id: Bytes! + id: Bytes! # setId setId: BigInt! # uint256 listener: Bytes! # address - owner: Bytes! # address + owner: Provider! # address of the provider leafCount: BigInt! # uint256 challengeRange: BigInt! # uint256 isActive: Boolean! @@ -16,22 +16,33 @@ type ProofSet @entity(immutable: false) { createdAt: BigInt! updatedAt: BigInt! blockNumber: BigInt! + + # Derived relationships + roots: [Root!]! @derivedFrom(field: "proofSet") + transactions: [Transaction!]! @derivedFrom(field: "proofSet") + eventLogs: [EventLog!]! @derivedFrom(field: "proofSet") + proofs: [Proof!]! @derivedFrom(field: "proofSet") + proofFees: [ProofFee!]! @derivedFrom(field: "proofSet") + faultRecords: [FaultRecord!]! @derivedFrom(field: "proofSet") } type Provider @entity(immutable: false) { - id: Bytes! + id: Bytes! # address address: Bytes! - proofSetIds: [BigInt!] + proofSetIds: [BigInt!] # Keep for potential direct query, but derived is primary totalFaultedPeriods: BigInt! totalDataSize: BigInt! createdAt: BigInt! updatedAt: BigInt! blockNumber: BigInt! + + # Derived relationship + proofSets: [ProofSet!]! @derivedFrom(field: "owner") } type Root @entity(immutable: false) { - id: Bytes! - setId: BigInt! # uint256 + id: Bytes! # Unique ID for Root (e.g., setId-rootId) + setId: BigInt! # uint256 (Keep for filtering/direct access) rootId: BigInt! # uint256 rawSize: BigInt! # uint256 cid: Bytes! @@ -45,24 +56,35 @@ type Root @entity(immutable: false) { createdAt: BigInt! updatedAt: BigInt! blockNumber: BigInt! + + # Relationship + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + + # Derived relationships + proofs: [Proof!]! @derivedFrom(field: "root") + faultRecords: [FaultRecord!]! @derivedFrom(field: "roots") # For many-to-many derived } type EventLog @entity(immutable: true) { - id: Bytes! - setId: BigInt! # uint256 + id: Bytes! # transactionHash-logIndex + setId: BigInt! # uint256 (Keep for filtering/direct access) address: Bytes! name: String! data: String! logIndex: BigInt! - transactionHash: Bytes! + transactionHash: Bytes! # Keep for linking createdAt: BigInt! blockNumber: BigInt! + + # Relationships + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + transaction: Transaction! # Link to Transaction (stores Transaction hash) } type Transaction @entity(immutable: true) { - id: Bytes! + id: Bytes! # hash hash: Bytes! - proofSetId: BigInt! # uint256 + proofSetId: BigInt! # uint256 (Keep for filtering/direct access) height: BigInt! # uint256 fromAddress: Bytes! # address toAddress: Bytes # address @@ -70,35 +92,52 @@ type Transaction @entity(immutable: true) { method: String! status: Boolean! createdAt: BigInt! + + # Relationship + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + + # Derived relationship + eventLogs: [EventLog!]! @derivedFrom(field: "transaction") } type Proof @entity(immutable: true) { - id: Bytes! - setId: BigInt! # uint256 - rootId: BigInt! # uint256 + id: Bytes! # Unique ID (e.g., txHash-logIndex or setId-rootId-offset) + setId: BigInt! # uint256 (Keep for filtering) + rootId: BigInt! # uint256 (Keep for filtering) proofOffset: BigInt! # uint256 provenAt: BigInt! # uint256 blockNumber: BigInt! + + # Relationships + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + root: Root! # Link to Root (stores Root ID) } type ProofFee @entity(immutable: true) { - id: Bytes! - setId: BigInt! # uint256 + id: Bytes! # Unique ID (e.g., txHash-logIndex or setId-timestamp) + setId: BigInt! # uint256 (Keep for filtering) proofFee: BigInt! # uint256 filUsdPrice: BigInt! # uint256 filUsdPriceExponent: BigInt! # int32 blockNumber: BigInt! createdAt: BigInt! + + # Relationship + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) } type FaultRecord @entity(immutable: true) { - id: Bytes! - proofSetId: BigInt! # uint256 - rootIds: [BigInt!]! # uint256[] + id: Bytes! # Unique ID (e.g., txHash-logIndex) + proofSetId: BigInt! # uint256 (Keep for filtering) + rootIds: [BigInt!]! # uint256[] (Keep for direct access) currentChallengeEpoch: BigInt! # uint256 nextChallengeEpoch: BigInt! # uint256 periodsFaulted: BigInt! # uint256 deadline: BigInt! # uint256 createdAt: BigInt! blockNumber: BigInt! + + # Relationships + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + roots: [Root!]! # Link to Roots (stores array of Root IDs) } diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index 079fc62..2d2dcb5 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -1,18 +1,37 @@ -import { BigInt, Bytes, crypto, Address } from "@graphprotocol/graph-ts"; +import { BigInt, Bytes, crypto, Address, log } from "@graphprotocol/graph-ts"; import { FaultRecord as FaultRecordEvent } from "../generated/PDPService/PDPService"; import { PDPVerifier, - PDPVerifier__findRootIdsResultValue0Struct, } from "../generated/PDPVerifier/PDPVerifier"; -import { PDPVerifierAddress, NumChallenges } from "../utils"; +import { PDPVerifierAddress, NumChallenges } from "../utils"; import { EventLog, ProofSet, - Provider, + Provider, FaultRecord, Root, + Transaction, } from "../generated/schema"; +// --- Helper Functions +function getProofSetEntityId(setId: BigInt): Bytes { + return Bytes.fromBigInt(setId) as Bytes; +} + +function getRootEntityId(setId: BigInt, rootId: BigInt): Bytes { + return Bytes.fromBigInt(setId).concat(Bytes.fromBigInt(rootId)) as Bytes; +} + +function getTransactionEntityId(txHash: Bytes): Bytes { + return txHash; +} + +function getEventLogEntityId(txHash: Bytes, logIndex: BigInt): Bytes { + return txHash.concatI32(logIndex.toI32()); +} +// --- End Helper Functions + + /** * Pads a Buffer or Uint8Array to 32 bytes with leading zeros. */ @@ -33,48 +52,52 @@ export function generateChallengeIndex( proofIndex: i32, totalLeaves: BigInt ): BigInt { - // seed: 32 bytes - // proofSetID: big-endian, 32 bytes - // proofIndex: big-endian, 8 bytes const data = new Uint8Array(32 + 32 + 8); - // Copy seed data.set(seed, 0); - // proofSetID to 32 bytes big-endian - const psIDBuf = padTo32Bytes(Bytes.fromBigInt(proofSetID)); + const psIDBuf = padTo32Bytes(Bytes.fromUint8Array(Bytes.fromBigInt(proofSetID))); data.set(psIDBuf, 32); - // proofIndex to 8 bytes big-endian - const idxBuf = Bytes.fromI32(proofIndex); - data.set(idxBuf, 64); + const idxBuf = padTo32Bytes(Bytes.fromUint8Array(Bytes.fromI32(proofIndex))); + data.set(idxBuf, 64); - // Keccak-256 const hashBytes = crypto.keccak256(Bytes.fromUint8Array(data)); - // Convert hash to bigint, mod totalLeaves const hashInt = BigInt.fromByteArray(hashBytes); + if (totalLeaves.isZero()) { + log.error("generateChallengeIndex: totalLeaves is zero, cannot calculate modulus. ProofSetID: {}. Seed: {}", [ + proofSetID.toString(), + Bytes.fromUint8Array(seed).toHex() + ]); + return BigInt.fromI32(0); + } const challengeIndex = hashInt.mod(totalLeaves); return challengeIndex; } export function findChallengedRoots( proofSetId: BigInt, - nextChallengeEpoch: BigInt, + challengeEpoch: BigInt, totalLeaves: BigInt, - blockNumber: BigInt ): BigInt[] { const instance = PDPVerifier.bind( Address.fromBytes(Bytes.fromHexString(PDPVerifierAddress)) ); - const seedInt = instance.getRandomness(nextChallengeEpoch); - const seed = Bytes.fromBigInt(seedInt); - if (seed.length === 0) { + const seedInt = instance.try_getRandomness(challengeEpoch); + if (seedInt.reverted || seedInt.value.isZero()) { + log.warning("findChallengedRoots: Failed to get randomness for epoch {}", [challengeEpoch.toString()]); return []; } + const seed = Bytes.fromBigInt(seedInt.value); + const challenges: BigInt[] = []; + if (totalLeaves.isZero()) { + log.warning("findChallengedRoots: totalLeaves is zero for ProofSet {}. Cannot generate challenges.", [proofSetId.toString()]); + return []; + } for (let i = 0; i < NumChallenges; i++) { const leafIdx = generateChallengeIndex( seed, @@ -85,7 +108,13 @@ export function findChallengedRoots( challenges.push(leafIdx); } - const rootIds = instance.findRootIds(proofSetId, challenges); + const rootIdsResult = instance.try_findRootIds(proofSetId, challenges); + if (rootIdsResult.reverted) { + log.warning("findChallengedRoots: findRootIds reverted for proofSetId {}", [proofSetId.toString()]); + return []; + } + + const rootIds = rootIdsResult.value; const rootIdsArray: BigInt[] = []; for (let i = 0; i < rootIds.length; i++) { rootIdsArray.push(rootIds[i].rootId); @@ -93,103 +122,171 @@ export function findChallengedRoots( return rootIdsArray; } +// Updated Handler export function handleFaultRecord(event: FaultRecordEvent): void { - const nextChallengeEpoch = BigInt.fromI32(event.transaction.input[4 + 32]); - const setId = event.params.proofSetId; + const periodsFaultedParam = event.params.periodsFaulted; + const proofSetEntityId = getProofSetEntityId(setId); + const entityId = getEventLogEntityId(event.transaction.hash, event.logIndex); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); + const proofSet = ProofSet.load(proofSetEntityId); + if (!proofSet) { + log.warning("handleFaultRecord: ProofSet {} not found for event tx {}", [ + setId.toString(), + event.transaction.hash.toHex() + ]); + return; + } + const challengeEpoch = proofSet.nextChallengeEpoch; + const challengeRange = proofSet.challengeRange; + const proofSetOwner = proofSet.owner; + + const eventLog = new EventLog(entityId); eventLog.setId = setId; eventLog.address = event.address; - eventLog.name = "FaultRecord"; - eventLog.data = - "{proofSetId:" + - setId.toString() + - ",periodsFaulted:" + - event.params.periodsFaulted.toString() + - ",deadline:" + - event.params.deadline.toString() + - "}"; + eventLog.name = "FaultRecord"; + eventLog.data = `{"proofSetId":"${setId.toString()}","periodsFaulted":"${periodsFaultedParam.toString()}","deadline":"${event.params.deadline.toString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; eventLog.blockNumber = event.block.number; - eventLog.save(); - - const setIdBA = Bytes.fromBigInt(setId); - const proofSet = ProofSet.load(Bytes.fromByteArray(setIdBA)); - - if (!proofSet) return; - - const challengeEpoch = proofSet.nextChallengeEpoch; - const proofSetOwner = proofSet.owner; - const totalLeaves = proofSet.challengeRange; + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; - proofSet.totalFaultedPeriods = proofSet.totalFaultedPeriods.plus( - event.params.periodsFaulted - ); - proofSet.updatedAt = event.block.timestamp; - proofSet.blockNumber = event.block.number; - proofSet.save(); - - const provider = Provider.load(proofSetOwner); - if (!provider) return; + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + const toAddress = event.transaction.to; + if (toAddress) { + transaction.toAddress = toAddress; + } + transaction.value = event.transaction.value; + transaction.method = "recordFault"; + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; + transaction.save(); + } - provider.totalFaultedPeriods = provider.totalFaultedPeriods.plus( - event.params.periodsFaulted - ); - provider.updatedAt = event.block.timestamp; - provider.blockNumber = event.block.number; - provider.save(); + let nextChallengeEpoch = BigInt.fromI32(0); + const inputData = event.transaction.input; + const expectedLength = 4 + 32 + 32 + 32; + if (inputData.length >= 4 + 32) { + const potentialNextEpochBytes = inputData.slice(4 + 32, 4 + 32 + 32); + if (potentialNextEpochBytes.length == 32) { + nextChallengeEpoch = BigInt.fromUnsignedBytes(potentialNextEpochBytes.reverse() as Bytes); + log.info("handleFaultRecord: Parsed potential nextChallengeEpoch: {}", [nextChallengeEpoch.toString()]); + } else { + log.warning("handleFaultRecord: Could not slice expected 32 bytes for nextChallengeEpoch from input data.", []); + } + } else { + log.warning("handleFaultRecord: Transaction input data too short to parse potential nextChallengeEpoch.", []); + } const rootIds = findChallengedRoots( - setId, - challengeEpoch, - totalLeaves, - event.block.number + setId, + challengeEpoch, + challengeRange, ); - if (rootIds.length === 0) return; - // get unique rootIds + if (rootIds.length === 0) { + log.info("handleFaultRecord: No roots found for challenge epoch {} in ProofSet {}", [ + challengeEpoch.toString(), + setId.toString() + ]); + } + let uniqueRootIds: BigInt[] = []; + let rootIdMap = new Map(); for (let i = 0; i < rootIds.length; i++) { - let isDuplicate = false; - for (let j = 0; j < uniqueRootIds.length; j++) { - if (uniqueRootIds[j] == rootIds[i]) { - isDuplicate = true; - break; + const rootIdStr = rootIds[i].toString(); + if (!rootIdMap.has(rootIdStr)) { + uniqueRootIds.push(rootIds[i]); + rootIdMap.set(rootIdStr, true); } - } - if (!isDuplicate) { - uniqueRootIds.push(rootIds[i]); - } } + log.info("handleFaultRecord: Found {} unique roots potentially faulted for epoch {} in ProofSet {}", [ + uniqueRootIds.length.toString(), + challengeEpoch.toString(), + setId.toString() + ]); + + let actualFaultsRecorded = 0; + let rootEntityIds: Bytes[] = []; for (let i = 0; i < uniqueRootIds.length; i++) { - const rootId = uniqueRootIds[i]; - const id = Bytes.fromBigInt(setId).concatI32(rootId.toI32()); - const root = Root.load(Bytes.fromByteArray(id)); - if (!root) return; + const rootId = uniqueRootIds[i]; + const rootEntityId = getRootEntityId(setId, rootId); - root.totalPeriodsFaulted = root.totalPeriodsFaulted.plus( - event.params.periodsFaulted - ); - root.lastFaultedEpoch = event.block.number; - root.lastFaultedAt = event.block.timestamp; - root.updatedAt = event.block.timestamp; - root.blockNumber = event.block.number; - root.save(); + const root = Root.load(rootEntityId); + if (root) { + if (!root.lastFaultedEpoch.equals(challengeEpoch)) { + root.totalPeriodsFaulted = root.totalPeriodsFaulted.plus(BigInt.fromI32(1)); + actualFaultsRecorded += 1; + } else { + log.info("handleFaultRecord: Root {} in Set {} already marked faulted for epoch {}", [ + rootId.toString(), + setId.toString(), + challengeEpoch.toString() + ]); + } + root.lastFaultedEpoch = challengeEpoch; + root.lastFaultedAt = event.block.timestamp; + root.updatedAt = event.block.timestamp; + root.blockNumber = event.block.number; + root.save(); + } else { + log.warning("handleFaultRecord: Root {} for Set {} not found while recording fault", [ + rootId.toString(), + setId.toString(), + ]); + } + rootEntityIds.push(rootEntityId); } - const faultRecord = new FaultRecord(eventId); + const faultRecord = new FaultRecord(entityId); faultRecord.proofSetId = setId; - faultRecord.rootIds = rootIds; + faultRecord.rootIds = uniqueRootIds; faultRecord.currentChallengeEpoch = challengeEpoch; - faultRecord.nextChallengeEpoch = nextChallengeEpoch; - faultRecord.periodsFaulted = event.params.periodsFaulted; - faultRecord.deadline = event.params.deadline; + faultRecord.nextChallengeEpoch = nextChallengeEpoch; + faultRecord.periodsFaulted = periodsFaultedParam; + faultRecord.deadline = event.params.deadline; faultRecord.createdAt = event.block.timestamp; faultRecord.blockNumber = event.block.number; + + faultRecord.proofSet = proofSetEntityId; + faultRecord.roots = rootEntityIds; + faultRecord.save(); + eventLog.save(); + + if (actualFaultsRecorded > 0) { + proofSet.totalFaultedPeriods = proofSet.totalFaultedPeriods.plus(BigInt.fromI32(actualFaultsRecorded)); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + const provider = Provider.load(proofSetOwner); + if (provider) { + provider.totalFaultedPeriods = provider.totalFaultedPeriods.plus(BigInt.fromI32(actualFaultsRecorded)); + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); + } else { + log.warning("handleFaultRecord: Provider {} not found for ProofSet {}", [ + proofSetOwner.toHex(), + setId.toString() + ]); + } + } else { + log.info("handleFaultRecord: No new root faults recorded for epoch {} in ProofSet {}", [ + challengeEpoch.toString(), + setId.toString() + ]); + } } diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index 11db284..7ab30a2 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -1,11 +1,11 @@ -import { BigInt, Bytes, log } from "@graphprotocol/graph-ts"; +import { BigInt, Bytes, log, store } from "@graphprotocol/graph-ts"; import { NextProvingPeriod as NextProvingPeriodEvent, PossessionProven as PossessionProvenEvent, ProofFeePaid as ProofFeePaidEvent, ProofSetCreated as ProofSetCreatedEvent, - ProofSetEmpty as ProofSetEmptyEvent, ProofSetDeleted as ProofSetDeletedEvent, + ProofSetEmpty as ProofSetEmptyEvent, ProofSetOwnerChanged as ProofSetOwnerChangedEvent, RootsAdded as RootsAddedEvent, RootsRemoved as RootsRemovedEvent, @@ -14,12 +14,52 @@ import { EventLog, Proof, ProofFee, + Provider, ProofSet, Root, - Provider, Transaction, } from "../generated/schema"; +// --- Helper Functions for ID Generation --- +function getProofSetEntityId(setId: BigInt): Bytes { + // Use setId directly as the entity ID as per schema comment + return Bytes.fromByteArray(Bytes.fromBigInt(setId)); +} + +function getRootEntityId(setId: BigInt, rootId: BigInt): Bytes { + // Combine setId and rootId for a unique Root entity ID + // Using a separator to avoid collisions, e.g., setId=1, rootId=23 vs setId=12, rootId=3 + return Bytes.fromUTF8(setId.toString() + "-" + rootId.toString()); +} + +function getTransactionEntityId(txHash: Bytes): Bytes { + // Use tx hash as the entity ID + return txHash; +} + +function getEventLogEntityId(txHash: Bytes, logIndex: BigInt): Bytes { + // Combine tx hash and log index for a unique EventLog entity ID + return txHash.concatI32(logIndex.toI32()); +} + +function getProofEntityId( + txHash: Bytes, + logIndex: BigInt, + index: i32 = 0 +): Bytes { + // Combine txHash, logIndex, and an optional index for uniqueness within the event + return txHash + .concat(Bytes.fromByteArray(Bytes.fromBigInt(logIndex))) + .concatI32(index); +} + +function getProofFeeEntityId(txHash: Bytes, logIndex: BigInt): Bytes { + // Use tx hash and log index for ProofFee ID + return txHash.concatI32(logIndex.toI32()); +} + +// ----------------------------------------- + // Define a class for the structure instead of a type alias class ParsedRootDetail { rootId: BigInt; @@ -32,9 +72,17 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { event.transaction.input.subarray(16, 36) ); - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); - eventLog.setId = event.params.setId; + const proofSetEntityId = getProofSetEntityId(event.params.setId); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const providerEntityId = event.params.owner; // Provider ID is the owner address + + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); + eventLog.setId = event.params.setId; // Keep raw ID for potential filtering eventLog.address = event.address; eventLog.name = "ProofSetCreated"; eventLog.data = @@ -44,27 +92,37 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { event.params.owner.toHexString() + "}"; eventLog.logIndex = event.logIndex; - eventLog.transactionHash = event.transaction.hash; + eventLog.transactionHash = event.transaction.hash; // Keep raw hash eventLog.createdAt = event.block.timestamp; eventLog.blockNumber = event.block.number; + // Link entities + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - const transaction = new Transaction(event.transaction.hash); - transaction.hash = event.transaction.hash; - transaction.proofSetId = event.params.setId; - transaction.height = event.block.number; - transaction.fromAddress = event.transaction.from; - transaction.toAddress = event.transaction.to; - transaction.value = event.transaction.value; - transaction.method = "createProofSet"; - transaction.status = true; - transaction.createdAt = event.block.timestamp; - transaction.save(); - - const id = Bytes.fromBigInt(event.params.setId); - let proofSet = new ProofSet(Bytes.fromByteArray(id)); + // Create Transaction + // Check if transaction already exists (e.g., from another log in the same tx) + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = event.params.setId; // Keep raw ID for potential filtering + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; // Can be null for contract creation + transaction.value = event.transaction.value; + transaction.method = "createProofSet"; // Or derive from input data if possible + transaction.status = true; // Assuming success if event emitted + transaction.createdAt = event.block.timestamp; + // Link entities + transaction.proofSet = proofSetEntityId; + transaction.save(); + } + + // Create ProofSet + let proofSet = new ProofSet(proofSetEntityId); proofSet.setId = event.params.setId; - proofSet.owner = event.params.owner; + proofSet.owner = providerEntityId; // Link to Provider via owner address (which is Provider's ID) proofSet.listener = listenerAddr; proofSet.isActive = true; proofSet.leafCount = BigInt.fromI32(0); @@ -81,37 +139,40 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { proofSet.blockNumber = event.block.number; proofSet.save(); - let provider = Provider.load(event.params.owner); - if (provider) { - let ids = provider.proofSetIds; - if (ids == null) { - ids = [event.params.setId]; - } else { - ids = ids.concat([event.params.setId]); - } - provider.proofSetIds = ids; - provider.blockNumber = event.block.number; - provider.createdAt = event.block.timestamp; - provider.updatedAt = event.block.timestamp; - } else { - provider = new Provider(event.params.owner); + // Create or Update Provider + let provider = Provider.load(providerEntityId); + if (provider == null) { + provider = new Provider(providerEntityId); provider.address = event.params.owner; provider.totalFaultedPeriods = BigInt.fromI32(0); provider.totalDataSize = BigInt.fromI32(0); - provider.proofSetIds = [event.params.setId]; - provider.blockNumber = event.block.number; + // provider.proofSetIds is no longer needed - managed by @derivedFrom + provider.proofSetIds = []; // Initialize as empty, although not strictly needed for derived provider.createdAt = event.block.timestamp; - provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + } else { + // Update timestamp/block even if exists + provider.blockNumber = event.block.number; } + // provider.proofSetIds = provider.proofSetIds.concat([event.params.setId]); // REMOVED - Handled by @derivedFrom + provider.updatedAt = event.block.timestamp; provider.save(); } export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { const setId = event.params.setId; const deletedLeafCount = event.params.deletedLeafCount; - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); - eventLog.setId = event.params.setId; + + const proofSetEntityId = getProofSetEntityId(setId); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); + eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "ProofSetDeleted"; eventLog.data = @@ -124,49 +185,101 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; eventLog.blockNumber = event.block.number; + // Link entities + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - const id = Bytes.fromBigInt(setId); - const proofSet = ProofSet.load(Bytes.fromByteArray(id)); + // Create Transaction if it doesn't exist + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; + transaction.value = event.transaction.value; + transaction.method = "deleteProofSet"; // Example method name + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.save(); + } + + // Load ProofSet + const proofSet = ProofSet.load(proofSetEntityId); if (!proofSet) { + log.warning("ProofSetDeleted: ProofSet {} not found", [setId.toString()]); return; } + + const ownerAddress = proofSet.owner; + + // Load Provider (to update stats before changing owner) + const provider = Provider.load(ownerAddress); + if (provider) { + provider.totalDataSize = provider.totalDataSize.minus( + proofSet.totalDataSize + ); + if (provider.totalDataSize.lt(BigInt.fromI32(0))) { + provider.totalDataSize = BigInt.fromI32(0); + } + // provider.proofSetIds is derived, no need to update manually + // const ids = provider.proofSetIds; + // let nextIds: BigInt[] = []; + // if (ids) { + // for (let i = 0; i < ids.length; i++) { + // if (ids[i] != setId) { + // nextIds.push(ids[i]); + // } + // } + // } + // provider.proofSetIds = nextIds; + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); + } else { + log.warning("ProofSetDeleted: Provider {} for ProofSet {} not found", [ + ownerAddress.toHexString(), + setId.toString(), + ]); + } + + // Update ProofSet proofSet.isActive = false; - proofSet.owner = Bytes.fromI32(0); - proofSet.totalRoots = BigInt.fromI32(0); - proofSet.totalDataSize = BigInt.fromI32(0); - proofSet.nextChallengeEpoch = BigInt.fromI32(0); - proofSet.lastProvenEpoch = BigInt.fromI32(0); + proofSet.owner = Bytes.empty(); // Clear owner to break link for derived field in Provider + // Keep other fields like leafCount etc. as they represent the state *before* deletion + // Or zero them out if required by logic: + // proofSet.totalRoots = BigInt.fromI32(0); + // proofSet.totalDataSize = BigInt.fromI32(0); + // proofSet.nextChallengeEpoch = BigInt.fromI32(0); + // proofSet.lastProvenEpoch = BigInt.fromI32(0); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); - const provider = Provider.load(proofSet.owner); - if (!provider) { - return; - } - provider.totalDataSize = provider.totalDataSize.minus(proofSet.totalDataSize); - const ids = provider.proofSetIds; - let nextIds: BigInt[] = []; - if (ids) { - for (let i = 0; i < ids.length; i++) { - if (ids[i] != setId) { - nextIds.push(ids[i]); - } - } - } - provider.proofSetIds = nextIds; - provider.updatedAt = event.block.timestamp; - provider.blockNumber = event.block.number; - provider.save(); + // Note: Roots associated with this ProofSet are not automatically removed or updated here. + // They still exist but are linked to an inactive ProofSet. + // Consider if Roots should be marked as inactive or removed in handleRootsRemoved if needed. } export function handleProofSetOwnerChanged( event: ProofSetOwnerChangedEvent ): void { const setId = event.params.setId; - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); + const oldOwner = event.params.oldOwner; + const newOwner = event.params.newOwner; + + const proofSetEntityId = getProofSetEntityId(setId); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "ProofSetOwnerChanged"; @@ -174,435 +287,526 @@ export function handleProofSetOwnerChanged( "{setId:" + setId.toString() + ",oldOwner:" + - event.params.oldOwner.toHexString() + + oldOwner.toHexString() + ",newOwner:" + - event.params.newOwner.toHexString() + + newOwner.toHexString() + "}"; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; eventLog.blockNumber = event.block.number; + // Link entities + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - const id = Bytes.fromBigInt(setId); - const proofSet = ProofSet.load(Bytes.fromByteArray(id)); + // Create Transaction if it doesn't exist + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; + transaction.value = event.transaction.value; + transaction.method = "changeProofSetOwner"; // Example method name + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.save(); + } + + // Load ProofSet + const proofSet = ProofSet.load(proofSetEntityId); if (!proofSet) { + log.warning("ProofSetOwnerChanged: ProofSet {} not found", [ + setId.toString(), + ]); return; } - proofSet.owner = event.params.newOwner; - proofSet.updatedAt = event.block.timestamp; - proofSet.blockNumber = event.block.number; - proofSet.save(); - const oldProvider = Provider.load(event.params.oldOwner); + // Load Old Provider (if exists) - Just update timestamp, derived field handles removal + const oldProvider = Provider.load(oldOwner); if (oldProvider) { - const ids = oldProvider.proofSetIds; - let nextIds: BigInt[] = []; - if (ids) { - for (let i = 0; i < ids.length; i++) { - if (ids[i] != setId) { - nextIds.push(ids[i]); - } - } - } - oldProvider.proofSetIds = nextIds; - oldProvider.totalDataSize = oldProvider.totalDataSize.minus( - proofSet.totalDataSize - ); + // provider.proofSetIds is derived, no manual update needed + // const ids = oldProvider.proofSetIds; + // let nextIds: BigInt[] = []; + // if (ids) { + // for (let i = 0; i < ids.length; i++) { + // if (ids[i] != setId) { + // nextIds.push(ids[i]); + // } + // } + // } + // oldProvider.proofSetIds = nextIds; oldProvider.updatedAt = event.block.timestamp; oldProvider.blockNumber = event.block.number; oldProvider.save(); + } else { + log.warning("ProofSetOwnerChanged: Old Provider {} not found", [ + oldOwner.toHexString(), + ]); } - const newProvider = Provider.load(event.params.newOwner); - if (newProvider) { - const ids = newProvider.proofSetIds; - newProvider.proofSetIds = ids ? ids.concat([setId]) : [setId]; - newProvider.totalDataSize = newProvider.totalDataSize.plus( - proofSet.totalDataSize - ); - newProvider.updatedAt = event.block.timestamp; + // Load or Create New Provider - Just update timestamp/create, derived field handles addition + let newProvider = Provider.load(newOwner); + if (newProvider == null) { + newProvider = new Provider(newOwner); + newProvider.address = newOwner; + newProvider.totalFaultedPeriods = BigInt.fromI32(0); + newProvider.totalDataSize = BigInt.fromI32(0); + newProvider.proofSetIds = []; // Initialize just in case, though not needed for derived + newProvider.createdAt = event.block.timestamp; newProvider.blockNumber = event.block.number; - newProvider.save(); } else { - const newProvider = new Provider(event.params.newOwner); - newProvider.address = event.params.newOwner; - newProvider.totalFaultedPeriods = BigInt.fromI32(0); - newProvider.totalDataSize = proofSet.totalDataSize; - newProvider.proofSetIds = [setId]; + // Update timestamp/block if exists newProvider.blockNumber = event.block.number; - newProvider.createdAt = event.block.timestamp; - newProvider.updatedAt = event.block.timestamp; - newProvider.save(); } + // newProvider.proofSetIds = newProvider.proofSetIds.concat([setId]); // REMOVED - Handled by @derivedFrom + newProvider.updatedAt = event.block.timestamp; + newProvider.save(); + + // Update ProofSet Owner (this updates the derived relationship on both old and new Provider) + proofSet.owner = newOwner; // Set owner to the new provider's ID + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); } export function handleProofFeePaid(event: ProofFeePaidEvent): void { const setId = event.params.setId; const fee = event.params.fee; - const price = event.params.price; - const expo = event.params.expo; - // 1. Create Event Log - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); - eventLog.setId = setId; + const proofSetEntityId = getProofSetEntityId(setId); + const proofFeeEntityId = getProofFeeEntityId( + event.transaction.hash, + event.logIndex + ); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); + eventLog.setId = setId; // Keep raw ID eventLog.address = event.address; eventLog.name = "ProofFeePaid"; - eventLog.data = - `{setId:${setId.toString()}, ` + - `fee:${fee.toString()}, ` + - `price:${price.toString()}, ` + - `expo:${expo.toString()}}`; + eventLog.data = "{setId:" + setId.toString() + ",fee:" + fee.toString() + "}"; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; eventLog.blockNumber = event.block.number; + // Link entities + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - // 2. Create Proof Fee record - // Use tx hash + log index as unique ID for the fee payment event - const proofFeeId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const proofFee = new ProofFee(proofFeeId); - proofFee.setId = event.params.setId; - proofFee.proofFee = event.params.fee; - proofFee.filUsdPrice = event.params.price; - proofFee.filUsdPriceExponent = BigInt.fromI32(event.params.expo); - proofFee.createdAt = event.block.timestamp; + // Create Transaction (if it doesn't exist) + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; // Keep raw ID + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; + transaction.value = event.transaction.value; + transaction.method = "payProofFee"; // Example method name + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.save(); + } + + // Create ProofFee + const proofFee = new ProofFee(proofFeeEntityId); + proofFee.setId = setId; // Keep raw ID + proofFee.proofFee = fee; + // Fetch FIL/USD price - This typically requires an Oracle or external data source + // For now, setting default values. Implement oracle integration if needed. + proofFee.filUsdPrice = BigInt.fromI32(0); + proofFee.filUsdPriceExponent = BigInt.fromI32(0); // Changed from BigInt to match schema (assuming int32) proofFee.blockNumber = event.block.number; + proofFee.createdAt = event.block.timestamp; + // Link entities + proofFee.proofSet = proofSetEntityId; proofFee.save(); - // 3. Update Proof Set - const proofSetId = Bytes.fromBigInt(event.params.setId); - const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetId)); + // Update ProofSet total fee paid + const proofSet = ProofSet.load(proofSetEntityId); if (proofSet) { - proofSet.totalFeePaid = proofSet.totalFeePaid.plus(event.params.fee); + proofSet.totalFeePaid = proofSet.totalFeePaid.plus(fee); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); + } else { + log.warning("ProofFeePaid: ProofSet {} not found", [setId.toString()]); } } export function handleProofSetEmpty(event: ProofSetEmptyEvent): void { const setId = event.params.setId; - // 1. Create Event Log - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); + const proofSetEntityId = getProofSetEntityId(setId); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "ProofSetEmpty"; - eventLog.data = `{setId:${setId.toString()}}`; + eventLog.data = "{setId:" + setId.toString() + "}"; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; eventLog.blockNumber = event.block.number; + // Link entities + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - // 2. Update Proof Set - const proofSetId = Bytes.fromBigInt(setId); - const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetId)); + // Create Transaction (if it doesn't exist) + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; + transaction.value = event.transaction.value; + transaction.method = "emptyProofSet"; // Example method name + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.save(); + } + + // Update ProofSet + const proofSet = ProofSet.load(proofSetEntityId); if (proofSet) { + const oldTotalDataSize = proofSet.totalDataSize; // Store size before zeroing + proofSet.totalRoots = BigInt.fromI32(0); proofSet.totalDataSize = BigInt.fromI32(0); - proofSet.lastProvenEpoch = BigInt.fromI32(0); - proofSet.nextChallengeEpoch = BigInt.fromI32(0); + proofSet.leafCount = BigInt.fromI32(0); + // Consider if other fields like lastProvenEpoch should be reset proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); + + // Update Provider's total data size + const provider = Provider.load(proofSet.owner); + if (provider) { + // Subtract the size this proof set had *before* it was zeroed + provider.totalDataSize = provider.totalDataSize.minus(oldTotalDataSize); + if (provider.totalDataSize.lt(BigInt.fromI32(0))) { + provider.totalDataSize = BigInt.fromI32(0); // Prevent negative size + } + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); + } else { + // It's possible the provider was deleted or owner changed before this event + log.warning("ProofSetEmpty: Provider {} for ProofSet {} not found", [ + proofSet.owner.toHexString(), + setId.toString(), + ]); + } + } else { + log.warning("ProofSetEmpty: ProofSet {} not found", [setId.toString()]); } + // Note: This event implies all roots are gone. Existing Root entities + // linked to this ProofSet might need to be marked as removed or deleted + // depending on the desired data retention policy. This handler doesn't do that. + // Consider adding logic here or in handleRootsRemoved if needed. } export function handlePossessionProven(event: PossessionProvenEvent): void { const setId = event.params.setId; const challenges = event.params.challenges; // Array of { rootId: BigInt, offset: BigInt } - const proofSetIdBytes = Bytes.fromBigInt(setId); // Get ProofSet ID early + const currentBlockNumber = event.block.number; // Use block number as epoch indicator + const currentTimestamp = event.block.timestamp; - // 1. Create Event Log - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); + const proofSetEntityId = getProofSetEntityId(setId); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + + // Create Event Log (Only one per event, log all challenges) + const eventLog = new EventLog(eventLogEntityId); eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "PossessionProven"; // Store challenges as a simple string representation for the log let challengesStr = "["; for (let i = 0; i < challenges.length; i++) { - challengesStr += `{rootId:${challenges[i].rootId.toString()}, offset:${challenges[ - i - ].offset.toString()}}`; + challengesStr += `{rootId:${challenges[i].rootId.toString()},offset:${challenges[i].offset.toString()}}`; if (i < challenges.length - 1) { challengesStr += ","; } } challengesStr += "]"; - eventLog.data = `{setId:${setId.toString()}, challenges:${challengesStr}}`; + eventLog.data = `{"setId":"${setId.toString()}","challenges":${challengesStr}}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; - eventLog.createdAt = event.block.timestamp; - eventLog.blockNumber = event.block.number; + eventLog.createdAt = currentTimestamp; + eventLog.blockNumber = currentBlockNumber; + // Link entities + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - const uniqueRootIds = new Set(); - // const proofSetIdBytes = Bytes.fromBigInt(setId); <= Moved up + // Create Transaction (if it doesn't exist) + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; // Keep raw ID + transaction.height = currentBlockNumber; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; + transaction.value = event.transaction.value; + transaction.method = "provePossession"; // Example method name + transaction.status = true; + transaction.createdAt = currentTimestamp; + transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.save(); + } + + // Update ProofSet (once per event) + const proofSet = ProofSet.load(proofSetEntityId); + if (proofSet) { + proofSet.lastProvenEpoch = currentBlockNumber; // Update last proven epoch for the set + // Note: totalProvedRoots logic might need review based on exact requirements + // If it tracks unique roots proven *ever*, this might be okay. + // If it tracks unique roots *per epoch*, more complex logic is needed. + // proofSet.totalProvedRoots = proofSet.totalProvedRoots.plus(BigInt.fromI32(challenges.length)); // Example: Increment by number of proofs in this batch + proofSet.updatedAt = currentTimestamp; + proofSet.blockNumber = currentBlockNumber; + proofSet.save(); + } else { + log.warning("PossessionProven: ProofSet {} not found", [setId.toString()]); + } - // 2. Process Challenges & Create Simplified Proof Entities + // Process each challenge for (let i = 0; i < challenges.length; i++) { const challenge = challenges[i]; const rootId = challenge.rootId; const offset = challenge.offset; + const rootEntityId = getRootEntityId(setId, rootId); + const proofEntityId = getProofEntityId( + event.transaction.hash, + event.logIndex, + i + ); // Use index for uniqueness - // Create a unique ID for the proof instance within this event - const proofId = event.transaction.hash - .concatI32(event.logIndex.toI32()) - .concatI32(i); - - const proof = new Proof(proofId); - proof.setId = setId; // Reverting to assign Bytes ID - this is standard practice - proof.rootId = rootId; + // Create Proof entity for each challenge + const proof = new Proof(proofEntityId); + proof.setId = setId; // Keep raw ID + proof.rootId = rootId; // Keep raw ID proof.proofOffset = offset; - proof.provenAt = event.block.timestamp; - proof.blockNumber = event.block.number; + proof.provenAt = currentTimestamp; // Use block timestamp for proven time + proof.blockNumber = currentBlockNumber; + // Link entities + proof.proofSet = proofSetEntityId; + proof.root = rootEntityId; proof.save(); - // Track unique root IDs processed in this event - const rootIdString = rootId.toString(); - uniqueRootIds.add(rootIdString); - - // 3. Update Root Statistics - // Construct Root entity ID (assuming format: set_id + root_id) - const rootEntityId = proofSetIdBytes.concatI32(rootId.toI32()); // Adjust if ID format is different - let root = Root.load(Bytes.fromByteArray(rootEntityId)); + // Update corresponding Root entity + const root = Root.load(rootEntityId); if (root) { + root.lastProvenEpoch = currentBlockNumber; + root.lastProvenAt = currentTimestamp; root.totalProofsSubmitted = root.totalProofsSubmitted.plus( BigInt.fromI32(1) ); - root.lastProvenEpoch = event.block.number; - root.lastProvenAt = event.block.timestamp; - root.updatedAt = event.block.timestamp; - root.blockNumber = event.block.number; + + // Clear fault info if it was previously marked as faulted *for this epoch* + // Assumes fault recording logic uses block number as epoch + if (root.lastFaultedEpoch.equals(currentBlockNumber)) { + log.info("PossessionProven: Clearing fault for root {} in epoch {}", [ + rootId.toString(), + currentBlockNumber.toString(), + ]); + root.lastFaultedEpoch = BigInt.fromI32(0); // Reset fault epoch + root.lastFaultedAt = BigInt.fromI32(0); // Reset fault timestamp + // Adjusting totalPeriodsFaulted likely happens elsewhere (e.g., during fault recording or epoch change) + } + + root.updatedAt = currentTimestamp; + root.blockNumber = currentBlockNumber; root.save(); } else { - // Should ideally not happen if RootsAdded is processed first, but log a warning log.warning( - "Root entity not found for setId {} and rootId {} in handlePossessionProven. Tx: {}", - [setId.toString(), rootId.toString(), event.transaction.hash.toHex()] + "PossessionProven: Root {} for Set {} not found during challenge processing", + [rootId.toString(), setId.toString()] ); } } - - // 4. Update ProofSet Statistics - const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetIdBytes)); - if (proofSet) { - // Increment by the number of *unique* roots proven in this event - // FIXME: Uncomment and adjust field name if 'totalProvedRoots' exists in schema - proofSet.totalProvedRoots = proofSet.totalProvedRoots.plus( - BigInt.fromI32(uniqueRootIds.size) - ); - proofSet.lastProvenEpoch = event.block.number; // Update last proven epoch for the set - proofSet.updatedAt = event.block.timestamp; - proofSet.blockNumber = event.block.number; - proofSet.save(); - } else { - log.error( - "ProofSet not found for setId {} in handlePossessionProven. Tx: {}", - [setId.toString(), event.transaction.hash.toHex()] - ); - } } export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { const setId = event.params.setId; - const nextChallengeEpoch = event.params.challengeEpoch; - const leafCount = event.params.leafCount; // Extracted, but not stored on ProofSet currently - const proofSetId = Bytes.fromBigInt(setId); // Get Bytes ID for linking/loading - - // 1. Create Event Log - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); - eventLog.setId = setId; // Reverting: Assign ProofSet ID hex string to 'set' field (matches current codegen, but likely needs schema fix) - eventLog.name = "NextProvingPeriod"; + const challengeEpoch = event.params.challengeEpoch; + + const proofSetEntityId = getProofSetEntityId(setId); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); + eventLog.setId = setId; eventLog.address = event.address; + eventLog.name = "NextProvingPeriod"; + eventLog.data = `{"setId":"${setId.toString()}","challengeEpoch":"${challengeEpoch.toString()}"}`; eventLog.logIndex = event.logIndex; - eventLog.blockNumber = event.block.number; - eventLog.createdAt = event.block.timestamp; // Corrected: Use 'createdAt' field eventLog.transactionHash = event.transaction.hash; - - // Store specific event parameters as JSON string - eventLog.data = `{ "setId": "${setId.toString()}", "nextChallengeEpoch": "${nextChallengeEpoch.toString()}", "leafCount": "${leafCount.toString()}" }`; // Corrected: Manual JSON string - + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + // Link entities + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - // 2. Update Proof Set - const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetId)); + // Create Transaction (if it doesn't exist) + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + transaction.toAddress = event.transaction.to; + transaction.value = event.transaction.value; + transaction.method = "startNextProvingPeriod"; // Example method name + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.save(); + } + // Update Proof Set + const proofSet = ProofSet.load(proofSetEntityId); if (proofSet) { - proofSet.nextChallengeEpoch = nextChallengeEpoch; - proofSet.challengeRange = leafCount; + proofSet.nextChallengeEpoch = challengeEpoch; + // Resetting totalProvedRoots might depend on whether it's per-epoch or cumulative. + // Assuming per-epoch for now, reset it here. + // proofSet.totalProvedRoots = BigInt.fromI32(0); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); } else { - log.error( - "ProofSet not found for setId {} in handleNextProvingPeriod. Tx: {}", - [setId.toString(), event.transaction.hash.toHex()] - ); - } -} - -// Helper function to read Uint256 from Bytes at a specific offset -function readUint256(data: Bytes, offset: i32): BigInt { - // Ensure offset is valid and there's enough data - if (offset < 0 || data.length < offset + 32) { - log.error("readUint256: Invalid offset {} or data length {}", [ - offset.toString(), - data.length.toString(), - ]); - // Return zero or throw? Returning zero might hide issues but prevent crashes. - return BigInt.zero(); - } - // Ethereum stores values in big-endian format. - // BigInt.fromUnsignedBytes expects little-endian, so we reverse the bytes. - const slicedData = Bytes.fromUint8Array(data.slice(offset, offset + 32)); - // Check if the sliced data is exactly 32 bytes before reversing - if (slicedData.length != 32) { - log.error("readUint256: Sliced data not 32 bytes. Offset: {}, Len: {}", [ - offset.toString(), - slicedData.length.toString(), - ]); - return BigInt.zero(); + log.warning("NextProvingPeriod: ProofSet {} not found", [setId.toString()]); } - return BigInt.fromUnsignedBytes(Bytes.fromUint8Array(slicedData.reverse())); + // Note: This event might also signify the end of the *previous* epoch. + // Logic could be added here to check Roots associated with this ProofSet + // and mark any that weren't proven in the previous epoch (proofSet.lastProvenEpoch) + // as faulted for that epoch. This depends on the exact fault mechanism. } -// Helper function to read Bytes (dynamic type) from Bytes at a specific offset -function readBytes(data: Bytes, offset: i32): Bytes { - // Ensure offset is valid - if (offset < 0 || data.length < offset + 32) { - log.error( - "readBytes: Invalid offset {} or data length {} for reading data offset", - [offset.toString(), data.length.toString()] - ); - return Bytes.empty(); - } - const dataTupleRelOffset = readUint256(data, offset).toI32(); - const dataTupleAbsOffset = offset + dataTupleRelOffset; - - // Ensure dataTupleOffset is valid - if (dataTupleAbsOffset < 0 || data.length < dataTupleAbsOffset + 32) { - log.error( - "readBytes: Invalid dataTupleOffset {} or data length {} for reading length", - [dataTupleAbsOffset.toString(), data.length.toString()] - ); - return Bytes.empty(); - } - const cidBytesRelOffset = readUint256(data, dataTupleAbsOffset).toI32(); - const cidBytesAbsOffset = dataTupleAbsOffset + cidBytesRelOffset; +export function handleRootsAdded(event: RootsAddedEvent): void { + const setId = event.params.setId; + const rootIdsFromEvent = event.params.rootIds; // Get root IDs from event params - const length = readUint256(data, cidBytesAbsOffset).toI32(); + // Input parsing is necessary to get rawSize and root bytes (cid) + const txInput = event.transaction.input; - // Ensure length is non-negative - if (length < 0) { - log.error("readBytes: Invalid negative length {} at cidBytesAbsOffset {}", [ - length.toString(), - cidBytesAbsOffset.toString(), + if (txInput.length < 4) { + log.error("Invalid tx input length in handleRootsAdded: {}", [ + event.transaction.hash.toHex(), ]); - return Bytes.empty(); - } - - const dataStart = cidBytesAbsOffset + 32; - - // Refined bounds check to avoid problematic casting - // 1. dataStart must be non-negative. - // 2. dataStart must be less than data.length to be a valid start index. - // 3. The remaining length (data.length - dataStart) must be >= the required length. - if ( - dataStart < 0 || - dataStart >= data.length || - length > data.length - dataStart - ) { - log.error( - "readBytes: Data slice out of bounds. Start: {}, Length: {}, Data Length: {}", - [dataStart.toString(), length.toString(), data.length.toString()] - ); - // If start is valid but length overflows, slice to the end - if (dataStart >= 0 && dataStart < data.length) { - return Bytes.fromUint8Array(data.slice(dataStart)); - } else { - // If start itself is invalid, return empty - return Bytes.empty(); - } + return; } - return Bytes.fromUint8Array(data.slice(dataStart, dataStart + length)); -} - -export function handleRootsAdded(event: RootsAddedEvent): void { - const setId = event.params.setId; // We can still get setId from params for convenience - const rootIdsFromEvent = event.params.rootIds; // Array of BigInt from event logs - const proofSetIdBytes = Bytes.fromBigInt(setId); - - const txInput = event.transaction.input; + const proofSetEntityId = getProofSetEntityId(setId); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); - // --- 1. Create Event Log --- - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); eventLog.setId = setId; - eventLog.name = "RootsAdded"; eventLog.address = event.address; - eventLog.logIndex = event.logIndex; - eventLog.blockNumber = event.block.number; - eventLog.createdAt = event.block.timestamp; - eventLog.transactionHash = event.transaction.hash; + eventLog.name = "RootsAdded"; // Store simple representation of event params let rootIdStrings: string[] = []; for (let i = 0; i < rootIdsFromEvent.length; i++) { rootIdStrings.push(rootIdsFromEvent[i].toString()); } eventLog.data = `{ "setId": "${setId.toString()}", "rootIds": [${rootIdStrings.join(",")}] }`; + eventLog.logIndex = event.logIndex; + eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; eventLog.save(); - // --- 2. Parse Transaction Input --- - if (txInput.length < 4) { - log.error("Invalid tx input length in handleRootsAdded: {}", [ + // Create Transaction (if it doesn't exist) + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + const toAddress = event.transaction.to; + if (toAddress) { + transaction.toAddress = toAddress; + } + transaction.value = event.transaction.value; + transaction.method = "addRoots"; // Example method name + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; + transaction.save(); + } + + // Load ProofSet + const proofSet = ProofSet.load(proofSetEntityId); + if (!proofSet) { + log.warning("handleRootsAdded: ProofSet {} not found for event tx {}", [ + setId.toString(), event.transaction.hash.toHex(), ]); return; } + + // --- Parse Transaction Input --- Requires helper functions // Skip function selector (first 4 bytes) const encodedData = Bytes.fromUint8Array(txInput.slice(4)); - let decodedSetId: BigInt; - let rootsDataOffset: i32; - let rootsDataLength: i32; - - let totalDataSizeAdded = BigInt.zero(); - let parsedRootDetails: ParsedRootDetail[] = []; - - // Need at least 3 * 32 bytes for setId, offset to rootsData, offset to extraData - if (encodedData.length < 96) { - log.error( - "handleRootsAdded: Encoded data too short for basic structure. Len: {}. Tx: {}", - [encodedData.length.toString(), event.transaction.hash.toHex()] - ); - return; - } - // Decode setId (uint256 at offset 0) - decodedSetId = readUint256(encodedData, 0); + let decodedSetId: BigInt = readUint256(encodedData, 0); if (decodedSetId != setId) { log.warning( - "Decoded setId {} does not match event param {} in handleRootsAdded. Tx: {}", + "Decoded setId {} does not match event param {} in handleRootsAdded. Tx: {}. Using event param.", [ decodedSetId.toString(), setId.toString(), event.transaction.hash.toHex(), ] ); - // Continue using setId from event params as it's usually more reliable } // Decode rootsData (tuple[]) - rootsDataOffset = readUint256(encodedData, 32).toI32(); // Offset is at byte 32 + let rootsDataOffset = readUint256(encodedData, 32).toI32(); // Offset is at byte 32 + let rootsDataLength: i32; if (rootsDataOffset < 0 || encodedData.length < rootsDataOffset + 32) { log.error( @@ -626,57 +830,43 @@ export function handleRootsAdded(event: RootsAddedEvent): void { return; } - const structsBaseOffset = rootsDataOffset + 32; // Start of struct offsets/data - - // Check for potential overflow before calculating required length - // Required length calculation needs care for potential overflow if rootsDataLength is huge - // Let's check if structsBaseOffset itself is valid first - if (structsBaseOffset < 0 || structsBaseOffset > encodedData.length) { - log.error("handleRootsAdded: Invalid structsBaseOffset {}. Tx: {}", [ - structsBaseOffset.toString(), - event.transaction.hash.toHex(), - ]); - return; - } - // Check if enough space exists for all offsets - const requiredLengthForOffsets = rootsDataLength * 32; - if (rootsDataLength > 0 && requiredLengthForOffsets / rootsDataLength != 32) { - // Check for multiplication overflow - log.error( - "handleRootsAdded: Potential overflow calculating required length for offsets. Count: {}. Tx: {}", - [rootsDataLength.toString(), event.transaction.hash.toHex()] - ); - return; - } - if (encodedData.length - structsBaseOffset < requiredLengthForOffsets) { + // Check if number of roots from input matches event param + if (rootsDataLength != rootIdsFromEvent.length) { log.error( - "handleRootsAdded: Encoded data too short for root struct offsets. Base: {}, Required: {}, Available: {}. Tx: {}", + "handleRootsAdded: Decoded roots count ({}) does not match event param count ({}). Tx: {}", [ - structsBaseOffset.toString(), - requiredLengthForOffsets.toString(), - (encodedData.length - structsBaseOffset).toString(), + rootsDataLength.toString(), + rootIdsFromEvent.length.toString(), event.transaction.hash.toHex(), ] ); - return; // Cannot read all struct offsets + // Decide how to proceed. For now, use the event length as the source of truth for iteration. + rootsDataLength = rootIdsFromEvent.length; } - // Iterate through the array elements + let addedRootCount = 0; + let totalDataSizeAdded = BigInt.fromI32(0); + + // Create Root entities + const structsBaseOffset = rootsDataOffset + 32; // Start of struct offsets/data + for (let i = 0; i < rootsDataLength; i++) { + const rootId = rootIdsFromEvent[i]; // Use rootId from event params + + // Calculate offset for this struct's data const structDataRelOffset = readUint256( encodedData, structsBaseOffset + i * 32 ).toI32(); - const structDataAbsOffset = structsBaseOffset + structDataRelOffset; // Absolute offset from start of encodedData (after selector) + const structDataAbsOffset = rootsDataOffset + 32 + structDataRelOffset; // Correct absolute offset - // Decode struct { root: tuple { bytes }, rawSize: uint256 } + // Check bounds for reading struct content (root offset + rawSize) if ( structDataAbsOffset < 0 || encodedData.length < structDataAbsOffset + 64 ) { - // Need 32 for root offset + 32 for rawSize log.error( - "handleRootsAdded: Encoded data too short or invalid offset for root struct content. Struct Index: {}, Abs Offset: {}, Len: {}. Tx: {}", + "handleRootsAdded: Encoded data too short or invalid offset for root struct content. Index: {}, Offset: {}, Len: {}. Tx: {}", [ i.toString(), structDataAbsOffset.toString(), @@ -684,214 +874,256 @@ export function handleRootsAdded(event: RootsAddedEvent): void { event.transaction.hash.toHex(), ] ); - continue; // Skip this root if data is too short or offset invalid + continue; // Skip this root } - // Decode root tuple (bytes offset is at structDataAbsOffset + 0) - const rootBytes = readBytes(encodedData, structDataAbsOffset); // readBytes handles inner offset/length - - // Decode rawSize (uint256 at structDataAbsOffset + 32) + // Decode root tuple (bytes stored within the struct) + const rootBytes = readBytes(encodedData, structDataAbsOffset); // Reads dynamic bytes + // Decode rawSize (uint256 stored after root bytes offset) const rawSize = readUint256(encodedData, structDataAbsOffset + 32); - // Get corresponding rootId from event params (assuming order matches) - if (i >= rootIdsFromEvent.length) { - log.error( - "handleRootsAdded: Mismatch between decoded roots ({}) and event roots ({}). Tx: {}", - [ - rootsDataLength.toString(), - rootIdsFromEvent.length.toString(), - event.transaction.hash.toHex(), - ] - ); - break; // Stop processing if lengths mismatch - } - const rootId = rootIdsFromEvent[i]; - - parsedRootDetails.push({ rootId, rawSize, rootBytes }); - totalDataSizeAdded = totalDataSizeAdded.plus(rawSize); - } + const rootEntityId = getRootEntityId(setId, rootId); - // Verify lengths match - if (parsedRootDetails.length != rootIdsFromEvent.length) { - log.error( - "handleRootsAdded: Final count mismatch after parsing. Decoded: {}, Event: {}. Tx: {}", - [ - parsedRootDetails.length.toString(), - rootIdsFromEvent.length.toString(), - event.transaction.hash.toHex(), - ] - ); - // Decide how to handle mismatch. For now, log and continue with parsed details. - } - - // --- 3. Create/Update Root Entities --- - for (let i = 0; i < parsedRootDetails.length; i++) { - const detail = parsedRootDetails[i]; - const rootId = detail.rootId; - const rawSize = detail.rawSize; - const rootBytes = detail.rootBytes; - - const rootEntityId = proofSetIdBytes.concatI32(rootId.toI32()); - let root = Root.load(Bytes.fromByteArray(rootEntityId)); - - if (root == null) { - root = new Root(Bytes.fromByteArray(rootEntityId)); - root.setId = setId; - root.rootId = rootId; - root.createdAt = event.block.timestamp; - root.blockNumber = event.block.number; - root.totalProofsSubmitted = BigInt.zero(); - root.totalPeriodsFaulted = BigInt.zero(); - root.lastProvenEpoch = BigInt.zero(); - root.lastProvenAt = BigInt.zero(); - root.lastFaultedEpoch = BigInt.zero(); - root.lastFaultedAt = BigInt.zero(); + let root = Root.load(rootEntityId); + if (root) { + log.warning( + "handleRootsAdded: Root {} for Set {} already exists. This shouldn't happen. Skipping.", + [rootId.toString(), setId.toString()] + ); + continue; } - root.rawSize = rawSize; - // Store hex representation of root bytes as CID for now - root.cid = rootBytes.length > 0 ? rootBytes : Bytes.fromI32(0); // Use hex or empty string + root = new Root(rootEntityId); + root.rootId = rootId; + root.setId = setId; + root.rawSize = rawSize; // Use correct field name + root.cid = rootBytes.length > 0 ? rootBytes : Bytes.empty(); // Use correct field name + root.removed = false; // Explicitly set removed to false + root.lastProvenEpoch = BigInt.fromI32(0); + root.lastProvenAt = BigInt.fromI32(0); + root.lastFaultedEpoch = BigInt.fromI32(0); + root.lastFaultedAt = BigInt.fromI32(0); + root.totalProofsSubmitted = BigInt.fromI32(0); + root.totalPeriodsFaulted = BigInt.fromI32(0); + root.createdAt = event.block.timestamp; root.updatedAt = event.block.timestamp; - root.removed = false; + root.blockNumber = event.block.number; + root.proofSet = proofSetEntityId; // Link to ProofSet + root.save(); + + addedRootCount += 1; + totalDataSizeAdded = totalDataSizeAdded.plus(rawSize); } - // --- 4. Update Proof Set Statistics --- - const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetIdBytes)); - if (proofSet) { - proofSet.totalRoots = proofSet.totalRoots.plus( - BigInt.fromI32(parsedRootDetails.length) // Use count of successfully parsed roots - ); - proofSet.totalDataSize = proofSet.totalDataSize.plus(totalDataSizeAdded); // Add parsed size - proofSet.updatedAt = event.block.timestamp; - proofSet.blockNumber = event.block.number; - proofSet.save(); + // Update ProofSet stats + proofSet.totalRoots = proofSet.totalRoots.plus( + BigInt.fromI32(addedRootCount) + ); // Use correct field name + proofSet.totalDataSize = proofSet.totalDataSize.plus(totalDataSizeAdded); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + // Update Provider stats + const provider = Provider.load(proofSet.owner); + if (provider) { + provider.totalDataSize = provider.totalDataSize.plus(totalDataSizeAdded); + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); } else { - log.error("ProofSet not found for setId {} in handleRootsAdded. Tx: {}", [ + log.warning("handleRootsAdded: Provider {} for ProofSet {} not found", [ + proofSet.owner.toHex(), setId.toString(), - event.transaction.hash.toHex(), ]); } - - // --- 5. Update Provider Statistics --- - const providerAddress = event.transaction.from; - let provider = Provider.load(providerAddress); - if (provider == null) { - provider = new Provider(providerAddress); - provider.address = providerAddress; - provider.totalDataSize = BigInt.zero(); // Initialize - provider.totalFaultedPeriods = BigInt.zero(); - provider.createdAt = event.block.timestamp; - provider.blockNumber = event.block.number; - } - provider.totalDataSize = provider.totalDataSize.plus(totalDataSizeAdded); - provider.updatedAt = event.block.timestamp; - provider.blockNumber = event.block.number; // Update block number on activity - provider.save(); } export function handleRootsRemoved(event: RootsRemovedEvent): void { const setId = event.params.setId; - const rootIds = event.params.rootIds; // Array of BigInt - const proofSetIdBytes = Bytes.fromBigInt(setId); + const rootIds = event.params.rootIds; - // 1. Create Event Log - const eventId = event.transaction.hash.concatI32(event.logIndex.toI32()); - const eventLog = new EventLog(eventId); + const proofSetEntityId = getProofSetEntityId(setId); + const eventLogEntityId = getEventLogEntityId( + event.transaction.hash, + event.logIndex + ); + const transactionEntityId = getTransactionEntityId(event.transaction.hash); + + // Create Event Log + const eventLog = new EventLog(eventLogEntityId); eventLog.setId = setId; - eventLog.name = "RootsRemoved"; eventLog.address = event.address; + eventLog.name = "RootsRemoved"; + // Store simple representation of event params + let removedRootIdStrings: string[] = []; + for (let i = 0; i < rootIds.length; i++) { + removedRootIdStrings.push(rootIds[i].toString()); + } + eventLog.data = `{ "setId": "${setId.toString()}", "rootIds": [${removedRootIdStrings.join(",")}] }`; eventLog.logIndex = event.logIndex; - eventLog.blockNumber = event.block.number; - eventLog.createdAt = event.block.timestamp; eventLog.transactionHash = event.transaction.hash; + eventLog.createdAt = event.block.timestamp; + eventLog.blockNumber = event.block.number; + eventLog.proofSet = proofSetEntityId; + eventLog.transaction = transactionEntityId; + eventLog.save(); - // Store rootIds array as a simple string in data field - let rootIdStrings: string[] = []; - for (let i = 0; i < rootIds.length; i++) { - rootIdStrings.push(rootIds[i].toString()); + // Create Transaction (if it doesn't exist) + let transaction = Transaction.load(transactionEntityId); + if (transaction == null) { + transaction = new Transaction(transactionEntityId); + transaction.hash = event.transaction.hash; + transaction.proofSetId = setId; + transaction.height = event.block.number; + transaction.fromAddress = event.transaction.from; + const toAddress = event.transaction.to; + if (toAddress) { + transaction.toAddress = toAddress; + } + transaction.value = event.transaction.value; + transaction.method = "removeRoots"; // Example method name + transaction.status = true; + transaction.createdAt = event.block.timestamp; + transaction.proofSet = proofSetEntityId; + transaction.save(); + } + + // Load ProofSet + const proofSet = ProofSet.load(proofSetEntityId); + if (!proofSet) { + log.warning("handleRootsRemoved: ProofSet {} not found for event tx {}", [ + setId.toString(), + event.transaction.hash.toHex(), + ]); + return; } - eventLog.data = `{ "setId": "${setId.toString()}", "rootIds": [${rootIdStrings.join(",")}] }`; - eventLog.save(); - // 2. Process Root Removals - let totalDataSizeRemoved = BigInt.zero(); - let removedCount = 0; + let removedRootCount = 0; + let removedDataSize = BigInt.fromI32(0); + // Mark Root entities as removed (soft delete) for (let i = 0; i < rootIds.length; i++) { const rootId = rootIds[i]; - const rootEntityId = proofSetIdBytes.concatI32(rootId.toI32()); - const rootEntityIdStr = Bytes.fromByteArray(rootEntityId).toHex(); // store.remove needs string ID + const rootEntityId = getRootEntityId(setId, rootId); - const root = Root.load(Bytes.fromByteArray(rootEntityId)); + const root = Root.load(rootEntityId); + if (root) { + removedRootCount += 1; + removedDataSize = removedDataSize.plus(root.rawSize); // Use correct field name - if (root != null) { - totalDataSizeRemoved = totalDataSizeRemoved.plus(root.rawSize); + // Mark the Root entity as removed instead of deleting root.removed = true; root.updatedAt = event.block.timestamp; root.blockNumber = event.block.number; root.save(); - removedCount++; } else { log.warning( - "Root entity with id {} not found for removal in handleRootsRemoved. SetId: {}, Tx: {}", - [rootEntityIdStr, setId.toString(), event.transaction.hash.toHex()] + "handleRootsRemoved: Root {} for Set {} not found. Cannot remove.", + [rootId.toString(), setId.toString()] ); } } - // 3. Update Proof Set Statistics - const proofSet = ProofSet.load(Bytes.fromByteArray(proofSetIdBytes)); - if (proofSet) { - proofSet.totalRoots = proofSet.totalRoots.minus( - BigInt.fromI32(removedCount) - ); - // Ensure totalRoots doesn't go negative (though theoretically shouldn't happen if logic is correct) - if (proofSet.totalRoots.lt(BigInt.zero())) { - log.warning( - "ProofSet {} totalRoots went negative after removal. Resetting to 0. Tx: {}", - [proofSetIdBytes.toHex(), event.transaction.hash.toHex()] - ); - proofSet.totalRoots = BigInt.zero(); - } + // Update ProofSet stats + proofSet.totalRoots = proofSet.totalRoots.minus( + BigInt.fromI32(removedRootCount) + ); // Use correct field name + proofSet.totalDataSize = proofSet.totalDataSize.minus(removedDataSize); - proofSet.totalDataSize = proofSet.totalDataSize.minus(totalDataSizeRemoved); - // Ensure totalDataSize doesn't go negative - if (proofSet.totalDataSize.lt(BigInt.zero())) { - log.warning( - "ProofSet {} totalDataSize went negative after removal. Resetting to 0. Tx: {}", - [proofSetIdBytes.toHex(), event.transaction.hash.toHex()] - ); - proofSet.totalDataSize = BigInt.zero(); - } - - proofSet.updatedAt = event.block.timestamp; - proofSet.blockNumber = event.block.number; - proofSet.save(); - } else { - // This case is less likely if roots existed, but possible in edge cases/reorgs - log.error("ProofSet not found for setId {} in handleRootsRemoved. Tx: {}", [ - setId.toString(), - event.transaction.hash.toHex(), - ]); + // Ensure stats don't go negative + if (proofSet.totalRoots.lt(BigInt.fromI32(0))) { + // Use correct field name + log.warning( + "handleRootsRemoved: ProofSet {} rootCount went negative. Setting to 0.", + [setId.toString()] + ); + proofSet.totalRoots = BigInt.fromI32(0); // Use correct field name + } + if (proofSet.totalDataSize.lt(BigInt.fromI32(0))) { + log.warning( + "handleRootsRemoved: ProofSet {} totalDataSize went negative. Setting to 0.", + [setId.toString()] + ); + proofSet.totalDataSize = BigInt.fromI32(0); } - // 4. Update Provider Statistics - const providerAddress = event.transaction.from; - const provider = Provider.load(providerAddress); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + // Update Provider stats + const provider = Provider.load(proofSet.owner); if (provider) { - provider.totalDataSize = provider.totalDataSize.minus(totalDataSizeRemoved); - // Ensure totalDataSize doesn't go negative - if (provider.totalDataSize.lt(BigInt.zero())) { + provider.totalDataSize = provider.totalDataSize.minus(removedDataSize); + // Ensure provider totalDataSize doesn't go negative + if (provider.totalDataSize.lt(BigInt.fromI32(0))) { log.warning( - "Provider {} totalDataSize went negative after removal. Resetting to 0. Tx: {}", - [providerAddress.toHex(), event.transaction.hash.toHex()] + "handleRootsRemoved: Provider {} totalDataSize went negative. Setting to 0.", + [proofSet.owner.toHex()] ); - provider.totalDataSize = BigInt.zero(); + provider.totalDataSize = BigInt.fromI32(0); } provider.updatedAt = event.block.timestamp; provider.blockNumber = event.block.number; provider.save(); + } else { + log.warning("handleRootsRemoved: Provider {} for ProofSet {} not found", [ + proofSet.owner.toHex(), + setId.toString(), + ]); + } +} + +// Helper function to read Uint256 from Bytes at a specific offset +function readUint256(data: Bytes, offset: i32): BigInt { + if (offset < 0 || data.length < offset + 32) { + log.error( + "readUint256: Invalid offset {} or data length {} for reading Uint256", + [offset.toString(), data.length.toString()] + ); + return BigInt.zero(); } - // If provider doesn't exist, we don't need to do anything (can't subtract size) + // Slice 32 bytes and convert to BigInt (assuming big-endian) + const slicedBytes = Bytes.fromUint8Array(data.slice(offset, offset + 32)); + // Ensure bytes are reversed for correct BigInt conversion if needed (depends on source endianness) + // AssemblyScript's BigInt.fromUnsignedBytes assumes little-endian by default, reverse for big-endian + const reversedBytesArray = slicedBytes.reverse(); // Returns Uint8Array + const reversedBytes = Bytes.fromUint8Array(reversedBytesArray); // Create Bytes object + return BigInt.fromUnsignedBytes(reversedBytes); +} + +// Helper function to read dynamic Bytes from ABI-encoded data +function readBytes(data: Bytes, offset: i32): Bytes { + // First, read the offset to the actual bytes data (uint256) + const bytesTupleOffset = readUint256(data, offset).toI32(); + + // Check if the bytes offset is valid + if (bytesTupleOffset < 0 || data.length < offset + bytesTupleOffset + 32) { + log.error( + "readBytes: Invalid offset {} or data length {} for reading bytes length", + [bytesTupleOffset.toString(), data.length.toString()] + ); + return Bytes.empty(); + } + + const bytesOffset = readUint256(data, offset + bytesTupleOffset).toI32(); + const bytesAbsOffset = offset + bytesTupleOffset + bytesOffset; + // Read the length of the bytes (uint256) + const bytesLength = readUint256(data, bytesAbsOffset).toI32(); + + // Check if the length is valid + if (bytesLength < 0 || data.length < bytesAbsOffset + 32 + bytesLength) { + log.error( + "readBytes: Invalid length {} or data length {} for reading bytes data", + [bytesLength.toString(), data.length.toString()] + ); + return Bytes.empty(); + } + + // Slice the actual bytes + return Bytes.fromUint8Array( + data.slice(bytesAbsOffset + 32, bytesAbsOffset + 32 + bytesLength) + ); } From 6d38c01d6f89edbe2072161b62f2032f166b2c24 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 18 Apr 2025 03:51:01 +0530 Subject: [PATCH 07/51] remove duplicate tx storing --- subgraph/schema.graphql | 4 +- subgraph/src/pdp-service.ts | 274 +++++++++++++++++------------------ subgraph/src/pdp-verifier.ts | 66 +-------- 3 files changed, 144 insertions(+), 200 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 8022462..90e9899 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -59,7 +59,6 @@ type Root @entity(immutable: false) { # Relationship proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) - # Derived relationships proofs: [Proof!]! @derivedFrom(field: "root") faultRecords: [FaultRecord!]! @derivedFrom(field: "roots") # For many-to-many derived @@ -95,7 +94,6 @@ type Transaction @entity(immutable: true) { # Relationship proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) - # Derived relationship eventLogs: [EventLog!]! @derivedFrom(field: "transaction") } @@ -118,7 +116,7 @@ type ProofFee @entity(immutable: true) { setId: BigInt! # uint256 (Keep for filtering) proofFee: BigInt! # uint256 filUsdPrice: BigInt! # uint256 - filUsdPriceExponent: BigInt! # int32 + filUsdPriceExponent: Int! # int32 blockNumber: BigInt! createdAt: BigInt! diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index 2d2dcb5..f7ea0f9 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -1,19 +1,16 @@ import { BigInt, Bytes, crypto, Address, log } from "@graphprotocol/graph-ts"; import { FaultRecord as FaultRecordEvent } from "../generated/PDPService/PDPService"; -import { - PDPVerifier, -} from "../generated/PDPVerifier/PDPVerifier"; -import { PDPVerifierAddress, NumChallenges } from "../utils"; +import { PDPVerifier } from "../generated/PDPVerifier/PDPVerifier"; +import { PDPVerifierAddress, NumChallenges } from "../utils"; import { EventLog, ProofSet, - Provider, + Provider, FaultRecord, Root, - Transaction, } from "../generated/schema"; -// --- Helper Functions +// --- Helper Functions function getProofSetEntityId(setId: BigInt): Bytes { return Bytes.fromBigInt(setId) as Bytes; } @@ -29,8 +26,7 @@ function getTransactionEntityId(txHash: Bytes): Bytes { function getEventLogEntityId(txHash: Bytes, logIndex: BigInt): Bytes { return txHash.concatI32(logIndex.toI32()); } -// --- End Helper Functions - +// --- End Helper Functions /** * Pads a Buffer or Uint8Array to 32 bytes with leading zeros. @@ -56,21 +52,23 @@ export function generateChallengeIndex( data.set(seed, 0); - const psIDBuf = padTo32Bytes(Bytes.fromUint8Array(Bytes.fromBigInt(proofSetID))); + const psIDBuf = padTo32Bytes( + Bytes.fromUint8Array(Bytes.fromBigInt(proofSetID)) + ); data.set(psIDBuf, 32); - const idxBuf = padTo32Bytes(Bytes.fromUint8Array(Bytes.fromI32(proofIndex))); - data.set(idxBuf, 64); + const idxBuf = padTo32Bytes(Bytes.fromUint8Array(Bytes.fromI32(proofIndex))); + data.set(idxBuf, 64); const hashBytes = crypto.keccak256(Bytes.fromUint8Array(data)); const hashInt = BigInt.fromByteArray(hashBytes); if (totalLeaves.isZero()) { - log.error("generateChallengeIndex: totalLeaves is zero, cannot calculate modulus. ProofSetID: {}. Seed: {}", [ - proofSetID.toString(), - Bytes.fromUint8Array(seed).toHex() - ]); - return BigInt.fromI32(0); + log.error( + "generateChallengeIndex: totalLeaves is zero, cannot calculate modulus. ProofSetID: {}. Seed: {}", + [proofSetID.toString(), Bytes.fromUint8Array(seed).toHex()] + ); + return BigInt.fromI32(0); } const challengeIndex = hashInt.mod(totalLeaves); return challengeIndex; @@ -78,25 +76,29 @@ export function generateChallengeIndex( export function findChallengedRoots( proofSetId: BigInt, - challengeEpoch: BigInt, - totalLeaves: BigInt, + challengeEpoch: BigInt, + totalLeaves: BigInt ): BigInt[] { const instance = PDPVerifier.bind( Address.fromBytes(Bytes.fromHexString(PDPVerifierAddress)) ); - const seedInt = instance.try_getRandomness(challengeEpoch); + const seedInt = instance.try_getRandomness(challengeEpoch); if (seedInt.reverted || seedInt.value.isZero()) { - log.warning("findChallengedRoots: Failed to get randomness for epoch {}", [challengeEpoch.toString()]); + log.warning("findChallengedRoots: Failed to get randomness for epoch {}", [ + challengeEpoch.toString(), + ]); return []; } const seed = Bytes.fromBigInt(seedInt.value); - const challenges: BigInt[] = []; if (totalLeaves.isZero()) { - log.warning("findChallengedRoots: totalLeaves is zero for ProofSet {}. Cannot generate challenges.", [proofSetId.toString()]); - return []; + log.warning( + "findChallengedRoots: totalLeaves is zero for ProofSet {}. Cannot generate challenges.", + [proofSetId.toString()] + ); + return []; } for (let i = 0; i < NumChallenges; i++) { const leafIdx = generateChallengeIndex( @@ -108,10 +110,12 @@ export function findChallengedRoots( challenges.push(leafIdx); } - const rootIdsResult = instance.try_findRootIds(proofSetId, challenges); + const rootIdsResult = instance.try_findRootIds(proofSetId, challenges); if (rootIdsResult.reverted) { - log.warning("findChallengedRoots: findRootIds reverted for proofSetId {}", [proofSetId.toString()]); - return []; + log.warning("findChallengedRoots: findRootIds reverted for proofSetId {}", [ + proofSetId.toString(), + ]); + return []; } const rootIds = rootIdsResult.value; @@ -125,27 +129,27 @@ export function findChallengedRoots( // Updated Handler export function handleFaultRecord(event: FaultRecordEvent): void { const setId = event.params.proofSetId; - const periodsFaultedParam = event.params.periodsFaulted; + const periodsFaultedParam = event.params.periodsFaulted; const proofSetEntityId = getProofSetEntityId(setId); const entityId = getEventLogEntityId(event.transaction.hash, event.logIndex); const transactionEntityId = getTransactionEntityId(event.transaction.hash); const proofSet = ProofSet.load(proofSetEntityId); if (!proofSet) { - log.warning("handleFaultRecord: ProofSet {} not found for event tx {}", [ - setId.toString(), - event.transaction.hash.toHex() - ]); - return; + log.warning("handleFaultRecord: ProofSet {} not found for event tx {}", [ + setId.toString(), + event.transaction.hash.toHex(), + ]); + return; } - const challengeEpoch = proofSet.nextChallengeEpoch; - const challengeRange = proofSet.challengeRange; - const proofSetOwner = proofSet.owner; + const challengeEpoch = proofSet.nextChallengeEpoch; + const challengeRange = proofSet.challengeRange; + const proofSetOwner = proofSet.owner; const eventLog = new EventLog(entityId); eventLog.setId = setId; eventLog.address = event.address; - eventLog.name = "FaultRecord"; + eventLog.name = "FaultRecord"; eventLog.data = `{"proofSetId":"${setId.toString()}","periodsFaulted":"${periodsFaultedParam.toString()}","deadline":"${event.params.deadline.toString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; @@ -154,139 +158,133 @@ export function handleFaultRecord(event: FaultRecordEvent): void { eventLog.proofSet = proofSetEntityId; eventLog.transaction = transactionEntityId; - let transaction = Transaction.load(transactionEntityId); - if (transaction == null) { - transaction = new Transaction(transactionEntityId); - transaction.hash = event.transaction.hash; - transaction.proofSetId = setId; - transaction.height = event.block.number; - transaction.fromAddress = event.transaction.from; - const toAddress = event.transaction.to; - if (toAddress) { - transaction.toAddress = toAddress; - } - transaction.value = event.transaction.value; - transaction.method = "recordFault"; - transaction.status = true; - transaction.createdAt = event.block.timestamp; - transaction.proofSet = proofSetEntityId; - transaction.save(); - } - - let nextChallengeEpoch = BigInt.fromI32(0); + let nextChallengeEpoch = BigInt.fromI32(0); const inputData = event.transaction.input; - const expectedLength = 4 + 32 + 32 + 32; - if (inputData.length >= 4 + 32) { - const potentialNextEpochBytes = inputData.slice(4 + 32, 4 + 32 + 32); + if (inputData.length >= 4 + 32) { + const potentialNextEpochBytes = inputData.slice(4 + 32, 4 + 32 + 32); if (potentialNextEpochBytes.length == 32) { - nextChallengeEpoch = BigInt.fromUnsignedBytes(potentialNextEpochBytes.reverse() as Bytes); - log.info("handleFaultRecord: Parsed potential nextChallengeEpoch: {}", [nextChallengeEpoch.toString()]); + nextChallengeEpoch = BigInt.fromUnsignedBytes( + potentialNextEpochBytes.reverse() as Bytes + ); + log.info("handleFaultRecord: Parsed potential nextChallengeEpoch: {}", [ + nextChallengeEpoch.toString(), + ]); } else { - log.warning("handleFaultRecord: Could not slice expected 32 bytes for nextChallengeEpoch from input data.", []); + log.warning( + "handleFaultRecord: Could not slice expected 32 bytes for nextChallengeEpoch from input data.", + [] + ); } } else { - log.warning("handleFaultRecord: Transaction input data too short to parse potential nextChallengeEpoch.", []); + log.warning( + "handleFaultRecord: Transaction input data too short to parse potential nextChallengeEpoch.", + [] + ); } - const rootIds = findChallengedRoots( - setId, - challengeEpoch, - challengeRange, - ); + const rootIds = findChallengedRoots(setId, challengeEpoch, challengeRange); if (rootIds.length === 0) { - log.info("handleFaultRecord: No roots found for challenge epoch {} in ProofSet {}", [ - challengeEpoch.toString(), - setId.toString() - ]); + log.info( + "handleFaultRecord: No roots found for challenge epoch {} in ProofSet {}", + [challengeEpoch.toString(), setId.toString()] + ); } let uniqueRootIds: BigInt[] = []; let rootIdMap = new Map(); for (let i = 0; i < rootIds.length; i++) { - const rootIdStr = rootIds[i].toString(); - if (!rootIdMap.has(rootIdStr)) { - uniqueRootIds.push(rootIds[i]); - rootIdMap.set(rootIdStr, true); - } + const rootIdStr = rootIds[i].toString(); + if (!rootIdMap.has(rootIdStr)) { + uniqueRootIds.push(rootIds[i]); + rootIdMap.set(rootIdStr, true); + } } - log.info("handleFaultRecord: Found {} unique roots potentially faulted for epoch {} in ProofSet {}", [ - uniqueRootIds.length.toString(), - challengeEpoch.toString(), - setId.toString() - ]); + log.info( + "handleFaultRecord: Found {} unique roots potentially faulted for epoch {} in ProofSet {}", + [ + uniqueRootIds.length.toString(), + challengeEpoch.toString(), + setId.toString(), + ] + ); let actualFaultsRecorded = 0; - let rootEntityIds: Bytes[] = []; + let rootEntityIds: Bytes[] = []; for (let i = 0; i < uniqueRootIds.length; i++) { - const rootId = uniqueRootIds[i]; - const rootEntityId = getRootEntityId(setId, rootId); - - const root = Root.load(rootEntityId); - if (root) { - if (!root.lastFaultedEpoch.equals(challengeEpoch)) { - root.totalPeriodsFaulted = root.totalPeriodsFaulted.plus(BigInt.fromI32(1)); - actualFaultsRecorded += 1; - } else { - log.info("handleFaultRecord: Root {} in Set {} already marked faulted for epoch {}", [ - rootId.toString(), - setId.toString(), - challengeEpoch.toString() - ]); - } - root.lastFaultedEpoch = challengeEpoch; - root.lastFaultedAt = event.block.timestamp; - root.updatedAt = event.block.timestamp; - root.blockNumber = event.block.number; - root.save(); + const rootId = uniqueRootIds[i]; + const rootEntityId = getRootEntityId(setId, rootId); + + const root = Root.load(rootEntityId); + if (root) { + if (!root.lastFaultedEpoch.equals(challengeEpoch)) { + root.totalPeriodsFaulted = root.totalPeriodsFaulted.plus( + BigInt.fromI32(1) + ); + actualFaultsRecorded += 1; } else { - log.warning("handleFaultRecord: Root {} for Set {} not found while recording fault", [ - rootId.toString(), - setId.toString(), - ]); + log.info( + "handleFaultRecord: Root {} in Set {} already marked faulted for epoch {}", + [rootId.toString(), setId.toString(), challengeEpoch.toString()] + ); } - rootEntityIds.push(rootEntityId); + root.lastFaultedEpoch = challengeEpoch; + root.lastFaultedAt = event.block.timestamp; + root.updatedAt = event.block.timestamp; + root.blockNumber = event.block.number; + root.save(); + } else { + log.warning( + "handleFaultRecord: Root {} for Set {} not found while recording fault", + [rootId.toString(), setId.toString()] + ); + } + rootEntityIds.push(rootEntityId); } - const faultRecord = new FaultRecord(entityId); + const faultRecord = new FaultRecord(entityId); faultRecord.proofSetId = setId; - faultRecord.rootIds = uniqueRootIds; + faultRecord.rootIds = uniqueRootIds; faultRecord.currentChallengeEpoch = challengeEpoch; - faultRecord.nextChallengeEpoch = nextChallengeEpoch; - faultRecord.periodsFaulted = periodsFaultedParam; - faultRecord.deadline = event.params.deadline; + faultRecord.nextChallengeEpoch = nextChallengeEpoch; + faultRecord.periodsFaulted = periodsFaultedParam; + faultRecord.deadline = event.params.deadline; faultRecord.createdAt = event.block.timestamp; faultRecord.blockNumber = event.block.number; - faultRecord.proofSet = proofSetEntityId; - faultRecord.roots = rootEntityIds; + faultRecord.proofSet = proofSetEntityId; + faultRecord.roots = rootEntityIds; faultRecord.save(); - eventLog.save(); + eventLog.save(); if (actualFaultsRecorded > 0) { - proofSet.totalFaultedPeriods = proofSet.totalFaultedPeriods.plus(BigInt.fromI32(actualFaultsRecorded)); - proofSet.updatedAt = event.block.timestamp; - proofSet.blockNumber = event.block.number; - proofSet.save(); - - const provider = Provider.load(proofSetOwner); - if (provider) { - provider.totalFaultedPeriods = provider.totalFaultedPeriods.plus(BigInt.fromI32(actualFaultsRecorded)); - provider.updatedAt = event.block.timestamp; - provider.blockNumber = event.block.number; - provider.save(); - } else { - log.warning("handleFaultRecord: Provider {} not found for ProofSet {}", [ - proofSetOwner.toHex(), - setId.toString() - ]); - } - } else { - log.info("handleFaultRecord: No new root faults recorded for epoch {} in ProofSet {}", [ - challengeEpoch.toString(), - setId.toString() + proofSet.totalFaultedPeriods = proofSet.totalFaultedPeriods.plus( + BigInt.fromI32(actualFaultsRecorded) + ); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + const provider = Provider.load(proofSetOwner); + if (provider) { + provider.totalFaultedPeriods = provider.totalFaultedPeriods.plus( + BigInt.fromI32(actualFaultsRecorded) + ); + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); + } else { + log.warning("handleFaultRecord: Provider {} not found for ProofSet {}", [ + proofSetOwner.toHex(), + setId.toString(), ]); + } + } else { + log.info( + "handleFaultRecord: No new root faults recorded for epoch {} in ProofSet {}", + [challengeEpoch.toString(), setId.toString()] + ); } } diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index 7ab30a2..71fb6e2 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -310,7 +310,7 @@ export function handleProofSetOwnerChanged( transaction.fromAddress = event.transaction.from; transaction.toAddress = event.transaction.to; transaction.value = event.transaction.value; - transaction.method = "changeProofSetOwner"; // Example method name + transaction.method = "claimProofSetOwnership"; // Example method name transaction.status = true; transaction.createdAt = event.block.timestamp; transaction.proofSet = proofSetEntityId; // Link to ProofSet @@ -377,6 +377,8 @@ export function handleProofSetOwnerChanged( export function handleProofFeePaid(event: ProofFeePaidEvent): void { const setId = event.params.setId; const fee = event.params.fee; + const filUsdPrice = event.params.price; + const filUsdPriceExponent = event.params.expo; const proofSetEntityId = getProofSetEntityId(setId); const proofFeeEntityId = getProofFeeEntityId( @@ -394,7 +396,7 @@ export function handleProofFeePaid(event: ProofFeePaidEvent): void { eventLog.setId = setId; // Keep raw ID eventLog.address = event.address; eventLog.name = "ProofFeePaid"; - eventLog.data = "{setId:" + setId.toString() + ",fee:" + fee.toString() + "}"; + eventLog.data = `{"proofSetId":"${setId.toString()}","fee":"${fee.toString()}","filUsdPrice":"${filUsdPrice.toString()}","filUsdPriceExponent":"${filUsdPriceExponent.toString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; @@ -404,31 +406,14 @@ export function handleProofFeePaid(event: ProofFeePaidEvent): void { eventLog.transaction = transactionEntityId; eventLog.save(); - // Create Transaction (if it doesn't exist) - let transaction = Transaction.load(transactionEntityId); - if (transaction == null) { - transaction = new Transaction(transactionEntityId); - transaction.hash = event.transaction.hash; - transaction.proofSetId = setId; // Keep raw ID - transaction.height = event.block.number; - transaction.fromAddress = event.transaction.from; - transaction.toAddress = event.transaction.to; - transaction.value = event.transaction.value; - transaction.method = "payProofFee"; // Example method name - transaction.status = true; - transaction.createdAt = event.block.timestamp; - transaction.proofSet = proofSetEntityId; // Link to ProofSet - transaction.save(); - } - // Create ProofFee const proofFee = new ProofFee(proofFeeEntityId); proofFee.setId = setId; // Keep raw ID proofFee.proofFee = fee; // Fetch FIL/USD price - This typically requires an Oracle or external data source // For now, setting default values. Implement oracle integration if needed. - proofFee.filUsdPrice = BigInt.fromI32(0); - proofFee.filUsdPriceExponent = BigInt.fromI32(0); // Changed from BigInt to match schema (assuming int32) + proofFee.filUsdPrice = filUsdPrice; + proofFee.filUsdPriceExponent = filUsdPriceExponent; proofFee.blockNumber = event.block.number; proofFee.createdAt = event.block.timestamp; // Link entities @@ -472,23 +457,6 @@ export function handleProofSetEmpty(event: ProofSetEmptyEvent): void { eventLog.transaction = transactionEntityId; eventLog.save(); - // Create Transaction (if it doesn't exist) - let transaction = Transaction.load(transactionEntityId); - if (transaction == null) { - transaction = new Transaction(transactionEntityId); - transaction.hash = event.transaction.hash; - transaction.proofSetId = setId; - transaction.height = event.block.number; - transaction.fromAddress = event.transaction.from; - transaction.toAddress = event.transaction.to; - transaction.value = event.transaction.value; - transaction.method = "emptyProofSet"; // Example method name - transaction.status = true; - transaction.createdAt = event.block.timestamp; - transaction.proofSet = proofSetEntityId; // Link to ProofSet - transaction.save(); - } - // Update ProofSet const proofSet = ProofSet.load(proofSetEntityId); if (proofSet) { @@ -691,7 +659,7 @@ export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { transaction.fromAddress = event.transaction.from; transaction.toAddress = event.transaction.to; transaction.value = event.transaction.value; - transaction.method = "startNextProvingPeriod"; // Example method name + transaction.method = "nextProvingPeriod"; // Example method name transaction.status = true; transaction.createdAt = event.block.timestamp; transaction.proofSet = proofSetEntityId; // Link to ProofSet @@ -970,26 +938,6 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { eventLog.transaction = transactionEntityId; eventLog.save(); - // Create Transaction (if it doesn't exist) - let transaction = Transaction.load(transactionEntityId); - if (transaction == null) { - transaction = new Transaction(transactionEntityId); - transaction.hash = event.transaction.hash; - transaction.proofSetId = setId; - transaction.height = event.block.number; - transaction.fromAddress = event.transaction.from; - const toAddress = event.transaction.to; - if (toAddress) { - transaction.toAddress = toAddress; - } - transaction.value = event.transaction.value; - transaction.method = "removeRoots"; // Example method name - transaction.status = true; - transaction.createdAt = event.block.timestamp; - transaction.proofSet = proofSetEntityId; - transaction.save(); - } - // Load ProofSet const proofSet = ProofSet.load(proofSetEntityId); if (!proofSet) { From 45705d62f816d31bc13d1e543b9dc879f7f81020 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 18 Apr 2025 23:00:09 +0530 Subject: [PATCH 08/51] add pdp network metrics --- subgraph/schema.graphql | 16 +++++++ subgraph/src/helper.ts | 53 ++++++++++++++++++++++ subgraph/src/pdp-service.ts | 7 +++ subgraph/src/pdp-verifier.ts | 86 +++++++++++++++++++++++++++++------- 4 files changed, 146 insertions(+), 16 deletions(-) create mode 100644 subgraph/src/helper.ts diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 90e9899..06f80d7 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -10,6 +10,7 @@ type ProofSet @entity(immutable: false) { nextChallengeEpoch: BigInt! # uint256 totalRoots: BigInt! # uint256 totalDataSize: BigInt! # uint256 + totalProofs: BigInt! # uint256 totalProvedRoots: BigInt! # uint256 totalFeePaid: BigInt! # uint256 totalFaultedPeriods: BigInt! # uint256 @@ -139,3 +140,18 @@ type FaultRecord @entity(immutable: true) { proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) roots: [Root!]! # Link to Roots (stores array of Root IDs) } + +type NetworkMetric @entity(immutable: false) { + id: Bytes! # Unique ID (e.g., txHash-logIndex) + totalProofSets: BigInt # uint256 + totalActiveProofSets: BigInt # uint256 + totalProviders: BigInt # uint256 + totalRoots: BigInt # uint256 + totalActiveRoots: BigInt # uint256 + totalDataSize: BigInt # uint256 + totalProofFeePaidInFil: BigInt # uint256 + totalProofs: BigInt # uint256 + totalProvedRoots: BigInt # uint256 + totalPeriodsFaulted: BigInt # uint256 + totalFaultedRoots: BigInt # uint256 +} diff --git a/subgraph/src/helper.ts b/subgraph/src/helper.ts new file mode 100644 index 0000000..08d6a8f --- /dev/null +++ b/subgraph/src/helper.ts @@ -0,0 +1,53 @@ +import { BigInt, Bytes, Value } from "@graphprotocol/graph-ts"; +import { NetworkMetric } from "../generated/schema"; + +export function saveNetworkMetrics( + keys: string[], + values: BigInt[], + methods?: string[] +): void { + const networkMetric = NetworkMetric.load(Bytes.fromUTF8("pdp_network_stats")); + + if (networkMetric) { + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = values[i]; + const method = methods ? methods[i] : "add"; + + const valueToChangeValue = networkMetric.get(key); + let valueToChange = BigInt.fromI32(0); + if (valueToChangeValue) { + valueToChange = valueToChangeValue.toBigInt(); + } + if (method == "add") { + networkMetric.set(key, Value.fromBigInt(valueToChange.plus(value))); + } else if (method == "subtract") { + networkMetric.set(key, Value.fromBigInt(valueToChange.minus(value))); + } else { + networkMetric.set(key, Value.fromBigInt(valueToChange.plus(value))); + } + } + networkMetric.save(); + } else { + const networkMetric = new NetworkMetric( + Bytes.fromUTF8("pdp_network_stats") + ); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = values[i]; + const method = methods ? methods[i] : "add"; + + let valueToAdd = BigInt.fromI32(0); + if (method == "add") { + valueToAdd = value; + } else if (method == "subtract") { + valueToAdd = BigInt.fromI32(0); + } else { + valueToAdd = value; + } + + networkMetric.set(key, Value.fromBigInt(valueToAdd)); + } + networkMetric.save(); + } +} diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index f7ea0f9..33dae13 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -9,6 +9,7 @@ import { FaultRecord, Root, } from "../generated/schema"; +import { saveNetworkMetrics } from "./helper"; // --- Helper Functions function getProofSetEntityId(setId: BigInt): Bytes { @@ -287,4 +288,10 @@ export function handleFaultRecord(event: FaultRecordEvent): void { [challengeEpoch.toString(), setId.toString()] ); } + + // Update network metrics + const keys = ["totalFaultedPeriods", "totalFaultedRoots"]; + const values = [periodsFaultedParam, BigInt.fromI32(uniqueRootIds.length)]; + const methods = ["add", "add"]; + saveNetworkMetrics(keys, values, methods); } diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index 71fb6e2..3c0695f 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -1,4 +1,4 @@ -import { BigInt, Bytes, log, store } from "@graphprotocol/graph-ts"; +import { BigInt, Bytes, log, store, Value } from "@graphprotocol/graph-ts"; import { NextProvingPeriod as NextProvingPeriodEvent, PossessionProven as PossessionProvenEvent, @@ -19,6 +19,7 @@ import { Root, Transaction, } from "../generated/schema"; +import { saveNetworkMetrics } from "./helper"; // --- Helper Functions for ID Generation --- function getProofSetEntityId(setId: BigInt): Bytes { @@ -133,6 +134,7 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { proofSet.totalDataSize = BigInt.fromI32(0); proofSet.totalFeePaid = BigInt.fromI32(0); proofSet.totalFaultedPeriods = BigInt.fromI32(0); + proofSet.totalProofs = BigInt.fromI32(0); proofSet.totalProvedRoots = BigInt.fromI32(0); proofSet.createdAt = event.block.timestamp; proofSet.updatedAt = event.block.timestamp; @@ -150,9 +152,23 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { provider.proofSetIds = []; // Initialize as empty, although not strictly needed for derived provider.createdAt = event.block.timestamp; provider.blockNumber = event.block.number; + + // update network metrics + saveNetworkMetrics( + ["totalProofSets", "totalActiveProofSets", "totalProviders"], + [BigInt.fromI32(1), BigInt.fromI32(1), BigInt.fromI32(1)], + ["add", "add", "add"] + ); } else { // Update timestamp/block even if exists provider.blockNumber = event.block.number; + + // update network metrics + saveNetworkMetrics( + ["totalProofSets", "totalActiveProofSets"], + [BigInt.fromI32(1), BigInt.fromI32(1)], + ["add", "add"] + ); } // provider.proofSetIds = provider.proofSetIds.concat([event.params.setId]); // REMOVED - Handled by @derivedFrom provider.updatedAt = event.block.timestamp; @@ -160,6 +176,11 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { } export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { + saveNetworkMetrics( + ["totalActiveProofSets"], + [BigInt.fromI32(1)], + ["subtract"] + ); const setId = event.params.setId; const deletedLeafCount = event.params.deletedLeafCount; @@ -352,6 +373,8 @@ export function handleProofSetOwnerChanged( // Load or Create New Provider - Just update timestamp/create, derived field handles addition let newProvider = Provider.load(newOwner); if (newProvider == null) { + // update network metrics + saveNetworkMetrics(["totalProviders"], [BigInt.fromI32(1)], ["add"]); newProvider = new Provider(newOwner); newProvider.address = newOwner; newProvider.totalFaultedPeriods = BigInt.fromI32(0); @@ -380,6 +403,9 @@ export function handleProofFeePaid(event: ProofFeePaidEvent): void { const filUsdPrice = event.params.price; const filUsdPriceExponent = event.params.expo; + // update network metrics + saveNetworkMetrics(["totalProofFeePaidInFil"], [fee], ["add"]); + const proofSetEntityId = getProofSetEntityId(setId); const proofFeeEntityId = getProofFeeEntityId( event.transaction.hash, @@ -551,21 +577,7 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { transaction.save(); } - // Update ProofSet (once per event) - const proofSet = ProofSet.load(proofSetEntityId); - if (proofSet) { - proofSet.lastProvenEpoch = currentBlockNumber; // Update last proven epoch for the set - // Note: totalProvedRoots logic might need review based on exact requirements - // If it tracks unique roots proven *ever*, this might be okay. - // If it tracks unique roots *per epoch*, more complex logic is needed. - // proofSet.totalProvedRoots = proofSet.totalProvedRoots.plus(BigInt.fromI32(challenges.length)); // Example: Increment by number of proofs in this batch - proofSet.updatedAt = currentTimestamp; - proofSet.blockNumber = currentBlockNumber; - proofSet.save(); - } else { - log.warning("PossessionProven: ProofSet {} not found", [setId.toString()]); - } - + const uniqueRoots = new Set(); // Process each challenge for (let i = 0; i < challenges.length; i++) { const challenge = challenges[i]; @@ -590,6 +602,8 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { proof.root = rootEntityId; proof.save(); + uniqueRoots.add(rootId); + // Update corresponding Root entity const root = Root.load(rootEntityId); if (root) { @@ -621,6 +635,28 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { ); } } + + // Update ProofSet (once per event) + const proofSet = ProofSet.load(proofSetEntityId); + if (proofSet) { + proofSet.lastProvenEpoch = currentBlockNumber; // Update last proven epoch for the set + proofSet.totalProvedRoots = proofSet.totalProvedRoots.plus( + BigInt.fromI32(uniqueRoots.size) + ); + proofSet.totalProofs = proofSet.totalProofs.plus(BigInt.fromI32(1)); + proofSet.updatedAt = currentTimestamp; + proofSet.blockNumber = currentBlockNumber; + proofSet.save(); + } else { + log.warning("PossessionProven: ProofSet {} not found", [setId.toString()]); + } + + // Update network metrics + saveNetworkMetrics( + ["totalProvedRoots", "totalProofs"], + [BigInt.fromI32(uniqueRoots.size), BigInt.fromI32(1)], + ["add", "add"] + ); } export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { @@ -906,6 +942,17 @@ export function handleRootsAdded(event: RootsAddedEvent): void { setId.toString(), ]); } + + // Update network metrics + saveNetworkMetrics( + ["totalRoots", "totalActiveRoots", "totalDataSize"], + [ + BigInt.fromI32(addedRootCount), + BigInt.fromI32(addedRootCount), + totalDataSizeAdded, + ], + ["add", "add", "add"] + ); } export function handleRootsRemoved(event: RootsRemovedEvent): void { @@ -1022,6 +1069,13 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { setId.toString(), ]); } + + // Update network metrics + saveNetworkMetrics( + ["totalActiveRoots", "totalDataSize"], + [BigInt.fromI32(removedRootCount), removedDataSize], + ["subtract", "subtract"] + ); } // Helper function to read Uint256 from Bytes at a specific offset From 39f7686fc563ecd48772e4ac87ef1f549f321361 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Sat, 19 Apr 2025 06:51:19 +0530 Subject: [PATCH 09/51] add provider and proof set metrics --- subgraph/schema.graphql | 74 +++++++++++- subgraph/src/helper.ts | 185 +++++++++++++++++++++++++++++- subgraph/src/pdp-service.ts | 98 +++++++++++----- subgraph/src/pdp-verifier.ts | 212 +++++++++++++++++++++++++++++------ 4 files changed, 503 insertions(+), 66 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 06f80d7..e8030fe 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -25,13 +25,17 @@ type ProofSet @entity(immutable: false) { proofs: [Proof!]! @derivedFrom(field: "proofSet") proofFees: [ProofFee!]! @derivedFrom(field: "proofSet") faultRecords: [FaultRecord!]! @derivedFrom(field: "proofSet") + weeklyActivities: [WeeklyProofSetActivity!]! @derivedFrom(field: "proofSet") + monthlyActivities: [MonthlyProofSetActivity!]! @derivedFrom(field: "proofSet") } type Provider @entity(immutable: false) { id: Bytes! # address address: Bytes! - proofSetIds: [BigInt!] # Keep for potential direct query, but derived is primary totalFaultedPeriods: BigInt! + totalFaultedRoots: BigInt! + totalProofSets: BigInt! + totalRoots: BigInt! totalDataSize: BigInt! createdAt: BigInt! updatedAt: BigInt! @@ -39,6 +43,10 @@ type Provider @entity(immutable: false) { # Derived relationship proofSets: [ProofSet!]! @derivedFrom(field: "owner") + weeklyProviderActivities: [WeeklyProviderActivity!]! + @derivedFrom(field: "provider") + monthlyProviderActivities: [MonthlyProviderActivity!]! + @derivedFrom(field: "provider") } type Root @entity(immutable: false) { @@ -141,6 +149,8 @@ type FaultRecord @entity(immutable: true) { roots: [Root!]! # Link to Roots (stores array of Root IDs) } +# Metrices + type NetworkMetric @entity(immutable: false) { id: Bytes! # Unique ID (e.g., txHash-logIndex) totalProofSets: BigInt # uint256 @@ -155,3 +165,65 @@ type NetworkMetric @entity(immutable: false) { totalPeriodsFaulted: BigInt # uint256 totalFaultedRoots: BigInt # uint256 } + +type WeeklyProviderActivity @entity(immutable: false) { + id: Bytes! # Unique ID (e.g., time derived) + providerId: Bytes! # address (Keep for filtering) + totalRootsAdded: BigInt! # uint256 + totalDataSizeAdded: BigInt! # uint256 + totalRootsRemoved: BigInt! # uint256 + totalDataSizeRemoved: BigInt! # uint256 + totalProofSetsCreated: BigInt! # uint256 + totalProofs: BigInt! # uint256 + totalRootsProved: BigInt! # uint256 + totalRootsFaulted: BigInt! # uint256 + totalPeriodsFaulted: BigInt! # uint256 + # Relationships + provider: Provider! # Link to Provider (stores Provider ID) +} + +type MonthlyProviderActivity @entity(immutable: false) { + id: Bytes! # Unique ID (e.g., time derived) + providerId: Bytes! # address (Keep for filtering) + totalProofSetsCreated: BigInt! # uint256 + totalRootsAdded: BigInt! # uint256 + totalDataSizeAdded: BigInt! # uint256 + totalRootsRemoved: BigInt! # uint256 + totalDataSizeRemoved: BigInt! # uint256 + totalProofs: BigInt! # uint256 + totalRootsProved: BigInt! # uint256 + totalRootsFaulted: BigInt! # uint256 + totalPeriodsFaulted: BigInt! # uint256 + # Relationships + provider: Provider! # Link to Provider (stores Provider ID) +} + +type WeeklyProofSetActivity @entity(immutable: false) { + id: Bytes! # Unique ID (e.g., time derived) + proofSetId: BigInt! # uint256 (Keep for filtering) + totalRootsAdded: BigInt! # uint256 + totalDataSizeAdded: BigInt! # uint256 + totalRootsRemoved: BigInt! # uint256 + totalDataSizeRemoved: BigInt! # uint256 + totalProofs: BigInt! # uint256 + totalRootsProved: BigInt! # uint256 + totalRootsFaulted: BigInt! # uint256 + totalPeriodsFaulted: BigInt! # uint256 + # Relationships + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) +} + +type MonthlyProofSetActivity @entity(immutable: false) { + id: Bytes! # Unique ID (e.g., time derived) + proofSetId: BigInt! # uint256 (Keep for filtering) + totalRootsAdded: BigInt! # uint256 + totalDataSizeAdded: BigInt! # uint256 + totalRootsRemoved: BigInt! # uint256 + totalDataSizeRemoved: BigInt! # uint256 + totalProofs: BigInt! # uint256 + totalRootsProved: BigInt! # uint256 + totalRootsFaulted: BigInt! # uint256 + totalPeriodsFaulted: BigInt! # uint256 + # Relationships + proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) +} diff --git a/subgraph/src/helper.ts b/subgraph/src/helper.ts index 08d6a8f..10c9fa9 100644 --- a/subgraph/src/helper.ts +++ b/subgraph/src/helper.ts @@ -1,4 +1,11 @@ -import { BigInt, Bytes, Value } from "@graphprotocol/graph-ts"; +import { + BigInt, + Bytes, + Value, + log, + store, + Entity, +} from "@graphprotocol/graph-ts"; import { NetworkMetric } from "../generated/schema"; export function saveNetworkMetrics( @@ -51,3 +58,179 @@ export function saveNetworkMetrics( networkMetric.save(); } } + +export function saveProviderMetrics( + entity: string, + id: Bytes, + providerId: Bytes, + keys: string[], + values: BigInt[], + methods?: string[] +): void { + const availableEntities = [ + "WeeklyProviderActivity", + "MonthlyProviderActivity", + ]; + if (!availableEntities.includes(entity)) { + log.error("Invalid entity: {}", [entity]); + return; + } + + const entityInstance = store.get(entity, id.toHexString()); + if (entityInstance) { + entityInstance.set("providerId", Value.fromBytes(providerId)); + entityInstance.set("provider", Value.fromBytes(providerId)); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = values[i]; + const method = methods ? methods[i] : "add"; + + const valueToChangeValue = entityInstance.get(key); + let valueToChange = BigInt.fromI32(0); + if (valueToChangeValue) { + valueToChange = valueToChangeValue.toBigInt(); + } + if (method == "replace") { + entityInstance.set(key, Value.fromBigInt(value)); + } else if (method == "add") { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } else if (method == "subtract") { + entityInstance.set(key, Value.fromBigInt(valueToChange.minus(value))); + } else { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } + } + store.set(entity, id.toHexString(), entityInstance); + } else { + let requiredKeys = [ + "totalRootsAdded", + "totalDataSizeAdded", + "totalProofSetsCreated", + "totalProofs", + "totalRootsProved", + "totalRootsFaulted", + "totalPeriodsFaulted", + "totalRootsRemoved", + "totalDataSizeRemoved", + ]; + const entityInstance = new Entity(); + entityInstance.set("providerId", Value.fromBytes(providerId)); + entityInstance.set("provider", Value.fromBytes(providerId)); + for (let i = 0; i < requiredKeys.length; i++) { + entityInstance.set(requiredKeys[i], Value.fromBigInt(BigInt.fromI32(0))); + } + + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = values[i]; + const method = methods ? methods[i] : "add"; + + const valueToChangeValue = entityInstance.get(key); + let valueToChange = BigInt.fromI32(0); + if (valueToChangeValue) { + valueToChange = valueToChangeValue.toBigInt(); + } + if (method == "replace") { + entityInstance.set(key, Value.fromBigInt(value)); + } else if (method == "add") { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } else if (method == "subtract") { + entityInstance.set(key, Value.fromBigInt(valueToChange.minus(value))); + } else { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } + } + store.set(entity, id.toHexString(), entityInstance); + } +} + +export function saveProofSetMetrics( + entity: string, + id: Bytes, + proofSetId: BigInt, + keys: string[], + values: BigInt[], + methods?: string[] +): void { + const availableEntities = [ + "WeeklyProofSetActivity", + "MonthlyProofSetActivity", + ]; + if (!availableEntities.includes(entity)) { + log.error("Invalid entity: {}", [entity]); + return; + } + + const entityInstance = store.get(entity, id.toHexString()); + + if (entityInstance) { + entityInstance.set("proofSetId", Value.fromBigInt(proofSetId)); + entityInstance.set( + "proofSet", + Value.fromBytes(Bytes.fromByteArray(Bytes.fromBigInt(proofSetId))) + ); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = values[i]; + const method = methods ? methods[i] : "add"; + + const valueToChangeValue = entityInstance.get(key); + let valueToChange = BigInt.fromI32(0); + if (valueToChangeValue) { + valueToChange = valueToChangeValue.toBigInt(); + } + if (method == "replace") { + entityInstance.set(key, Value.fromBigInt(value)); + } else if (method == "add") { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } else if (method == "subtract") { + entityInstance.set(key, Value.fromBigInt(valueToChange.minus(value))); + } else { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } + } + store.set(entity, id.toHexString(), entityInstance); + } else { + let requiredKeys = [ + "totalRootsAdded", + "totalDataSizeAdded", + "totalProofs", + "totalRootsProved", + "totalRootsFaulted", + "totalPeriodsFaulted", + "totalRootsRemoved", + "totalDataSizeRemoved", + ]; + const entityInstance = new Entity(); + entityInstance.set("proofSetId", Value.fromBigInt(proofSetId)); + entityInstance.set( + "proofSet", + Value.fromBytes(Bytes.fromByteArray(Bytes.fromBigInt(proofSetId))) + ); + for (let i = 0; i < requiredKeys.length; i++) { + entityInstance.set(requiredKeys[i], Value.fromBigInt(BigInt.fromI32(0))); + } + + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = values[i]; + const method = methods ? methods[i] : "add"; + + const valueToChangeValue = entityInstance.get(key); + let valueToChange = BigInt.fromI32(0); + if (valueToChangeValue) { + valueToChange = valueToChangeValue.toBigInt(); + } + if (method == "replace") { + entityInstance.set(key, Value.fromBigInt(value)); + } else if (method == "add") { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } else if (method == "subtract") { + entityInstance.set(key, Value.fromBigInt(valueToChange.minus(value))); + } else { + entityInstance.set(key, Value.fromBigInt(valueToChange.plus(value))); + } + } + store.set(entity, id.toHexString(), entityInstance); + } +} diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index 33dae13..bd3c578 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -9,7 +9,11 @@ import { FaultRecord, Root, } from "../generated/schema"; -import { saveNetworkMetrics } from "./helper"; +import { + saveNetworkMetrics, + saveProviderMetrics, + saveProofSetMetrics, +} from "./helper"; // --- Helper Functions function getProofSetEntityId(setId: BigInt): Bytes { @@ -211,7 +215,6 @@ export function handleFaultRecord(event: FaultRecordEvent): void { ] ); - let actualFaultsRecorded = 0; let rootEntityIds: Bytes[] = []; for (let i = 0; i < uniqueRootIds.length; i++) { const rootId = uniqueRootIds[i]; @@ -220,10 +223,8 @@ export function handleFaultRecord(event: FaultRecordEvent): void { const root = Root.load(rootEntityId); if (root) { if (!root.lastFaultedEpoch.equals(challengeEpoch)) { - root.totalPeriodsFaulted = root.totalPeriodsFaulted.plus( - BigInt.fromI32(1) - ); - actualFaultsRecorded += 1; + root.totalPeriodsFaulted = + root.totalPeriodsFaulted.plus(periodsFaultedParam); } else { log.info( "handleFaultRecord: Root {} in Set {} already marked faulted for epoch {}", @@ -260,33 +261,27 @@ export function handleFaultRecord(event: FaultRecordEvent): void { faultRecord.save(); eventLog.save(); - if (actualFaultsRecorded > 0) { - proofSet.totalFaultedPeriods = proofSet.totalFaultedPeriods.plus( - BigInt.fromI32(actualFaultsRecorded) + proofSet.totalFaultedPeriods = + proofSet.totalFaultedPeriods.plus(periodsFaultedParam); + proofSet.updatedAt = event.block.timestamp; + proofSet.blockNumber = event.block.number; + proofSet.save(); + + const provider = Provider.load(proofSetOwner); + if (provider) { + provider.totalFaultedPeriods = + provider.totalFaultedPeriods.plus(periodsFaultedParam); + provider.totalFaultedRoots = provider.totalFaultedRoots.plus( + BigInt.fromI32(uniqueRootIds.length) ); - proofSet.updatedAt = event.block.timestamp; - proofSet.blockNumber = event.block.number; - proofSet.save(); - - const provider = Provider.load(proofSetOwner); - if (provider) { - provider.totalFaultedPeriods = provider.totalFaultedPeriods.plus( - BigInt.fromI32(actualFaultsRecorded) - ); - provider.updatedAt = event.block.timestamp; - provider.blockNumber = event.block.number; - provider.save(); - } else { - log.warning("handleFaultRecord: Provider {} not found for ProofSet {}", [ - proofSetOwner.toHex(), - setId.toString(), - ]); - } + provider.updatedAt = event.block.timestamp; + provider.blockNumber = event.block.number; + provider.save(); } else { - log.info( - "handleFaultRecord: No new root faults recorded for epoch {} in ProofSet {}", - [challengeEpoch.toString(), setId.toString()] - ); + log.warning("handleFaultRecord: Provider {} not found for ProofSet {}", [ + proofSetOwner.toHex(), + setId.toString(), + ]); } // Update network metrics @@ -294,4 +289,45 @@ export function handleFaultRecord(event: FaultRecordEvent): void { const values = [periodsFaultedParam, BigInt.fromI32(uniqueRootIds.length)]; const methods = ["add", "add"]; saveNetworkMetrics(keys, values, methods); + + // Update provider and proof set metrics + const weekId = event.block.timestamp.toI32() / 604800; + const monthId = event.block.timestamp.toI32() / 2592000; + const providerId = proofSet.owner; + const weeklyProviderId = Bytes.fromI32(weekId).concat(providerId); + const monthlyProviderId = Bytes.fromI32(monthId).concat(providerId); + const weeklyProofSetId = Bytes.fromI32(weekId).concat(proofSetEntityId); + const monthlyProofSetId = Bytes.fromI32(monthId).concat(proofSetEntityId); + saveProviderMetrics( + "WeeklyProviderActivity", + weeklyProviderId, + providerId, + ["totalFaultedPeriods", "totalFaultedRoots"], + [periodsFaultedParam, BigInt.fromI32(uniqueRootIds.length)], + ["add", "add"] + ); + saveProviderMetrics( + "MonthlyProviderActivity", + monthlyProviderId, + providerId, + ["totalFaultedPeriods", "totalFaultedRoots"], + [periodsFaultedParam, BigInt.fromI32(uniqueRootIds.length)], + ["add", "add"] + ); + saveProofSetMetrics( + "WeeklyProofSetActivity", + weeklyProofSetId, + setId, + ["totalFaultedPeriods", "totalFaultedRoots"], + [periodsFaultedParam, BigInt.fromI32(uniqueRootIds.length)], + ["add", "add"] + ); + saveProofSetMetrics( + "MonthlyProofSetActivity", + monthlyProofSetId, + setId, + ["totalFaultedPeriods", "totalFaultedRoots"], + [periodsFaultedParam, BigInt.fromI32(uniqueRootIds.length)], + ["add", "add"] + ); } diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index 3c0695f..d7b7638 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -19,7 +19,11 @@ import { Root, Transaction, } from "../generated/schema"; -import { saveNetworkMetrics } from "./helper"; +import { + saveProviderMetrics, + saveProofSetMetrics, + saveNetworkMetrics, +} from "./helper"; // --- Helper Functions for ID Generation --- function getProofSetEntityId(setId: BigInt): Bytes { @@ -146,10 +150,11 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { if (provider == null) { provider = new Provider(providerEntityId); provider.address = event.params.owner; + provider.totalRoots = BigInt.fromI32(0); + provider.totalProofSets = BigInt.fromI32(1); provider.totalFaultedPeriods = BigInt.fromI32(0); + provider.totalFaultedRoots = BigInt.fromI32(0); provider.totalDataSize = BigInt.fromI32(0); - // provider.proofSetIds is no longer needed - managed by @derivedFrom - provider.proofSetIds = []; // Initialize as empty, although not strictly needed for derived provider.createdAt = event.block.timestamp; provider.blockNumber = event.block.number; @@ -173,6 +178,28 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { // provider.proofSetIds = provider.proofSetIds.concat([event.params.setId]); // REMOVED - Handled by @derivedFrom provider.updatedAt = event.block.timestamp; provider.save(); + + // update provider and proof set metrics + const weekId = event.block.timestamp.toI32() / 604800; + const monthId = event.block.timestamp.toI32() / 2592000; + const weeklyProviderId = Bytes.fromI32(weekId).concat(providerEntityId); + const monthlyProviderId = Bytes.fromI32(monthId).concat(providerEntityId); + saveProviderMetrics( + "WeeklyProviderActivity", + weeklyProviderId, + providerEntityId, + ["totalProofSetsCreated"], + [BigInt.fromI32(1)], + ["add"] + ); + saveProviderMetrics( + "MonthlyProviderActivity", + monthlyProviderId, + providerEntityId, + ["totalProofSetsCreated"], + [BigInt.fromI32(1)], + ["add"] + ); } export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { @@ -246,17 +273,7 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { if (provider.totalDataSize.lt(BigInt.fromI32(0))) { provider.totalDataSize = BigInt.fromI32(0); } - // provider.proofSetIds is derived, no need to update manually - // const ids = provider.proofSetIds; - // let nextIds: BigInt[] = []; - // if (ids) { - // for (let i = 0; i < ids.length; i++) { - // if (ids[i] != setId) { - // nextIds.push(ids[i]); - // } - // } - // } - // provider.proofSetIds = nextIds; + provider.totalProofSets = provider.totalProofSets.minus(BigInt.fromI32(1)); provider.updatedAt = event.block.timestamp; provider.blockNumber = event.block.number; provider.save(); @@ -269,13 +286,11 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { // Update ProofSet proofSet.isActive = false; - proofSet.owner = Bytes.empty(); // Clear owner to break link for derived field in Provider - // Keep other fields like leafCount etc. as they represent the state *before* deletion - // Or zero them out if required by logic: - // proofSet.totalRoots = BigInt.fromI32(0); - // proofSet.totalDataSize = BigInt.fromI32(0); - // proofSet.nextChallengeEpoch = BigInt.fromI32(0); - // proofSet.lastProvenEpoch = BigInt.fromI32(0); + proofSet.owner = Bytes.empty(); + proofSet.totalRoots = BigInt.fromI32(0); + proofSet.totalDataSize = BigInt.fromI32(0); + proofSet.nextChallengeEpoch = BigInt.fromI32(0); + proofSet.lastProvenEpoch = BigInt.fromI32(0); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); @@ -350,17 +365,9 @@ export function handleProofSetOwnerChanged( // Load Old Provider (if exists) - Just update timestamp, derived field handles removal const oldProvider = Provider.load(oldOwner); if (oldProvider) { - // provider.proofSetIds is derived, no manual update needed - // const ids = oldProvider.proofSetIds; - // let nextIds: BigInt[] = []; - // if (ids) { - // for (let i = 0; i < ids.length; i++) { - // if (ids[i] != setId) { - // nextIds.push(ids[i]); - // } - // } - // } - // oldProvider.proofSetIds = nextIds; + oldProvider.totalProofSets = oldProvider.totalProofSets.minus( + BigInt.fromI32(1) + ); oldProvider.updatedAt = event.block.timestamp; oldProvider.blockNumber = event.block.number; oldProvider.save(); @@ -377,9 +384,11 @@ export function handleProofSetOwnerChanged( saveNetworkMetrics(["totalProviders"], [BigInt.fromI32(1)], ["add"]); newProvider = new Provider(newOwner); newProvider.address = newOwner; + newProvider.totalRoots = BigInt.fromI32(0); newProvider.totalFaultedPeriods = BigInt.fromI32(0); + newProvider.totalFaultedRoots = BigInt.fromI32(0); newProvider.totalDataSize = BigInt.fromI32(0); - newProvider.proofSetIds = []; // Initialize just in case, though not needed for derived + newProvider.totalProofSets = BigInt.fromI32(1); newProvider.createdAt = event.block.timestamp; newProvider.blockNumber = event.block.number; } else { @@ -647,6 +656,47 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { proofSet.updatedAt = currentTimestamp; proofSet.blockNumber = currentBlockNumber; proofSet.save(); + + // update provider and proof set metrics + const weekId = currentTimestamp.toI32() / 604800; + const monthId = currentTimestamp.toI32() / 2592000; + const providerAddr = proofSet.owner; + const weeklyProviderId = Bytes.fromI32(weekId).concat(providerAddr); + const monthlyProviderId = Bytes.fromI32(monthId).concat(providerAddr); + const weeklyProofSetId = Bytes.fromI32(weekId).concat(proofSetEntityId); + const monthlyProofSetId = Bytes.fromI32(monthId).concat(proofSetEntityId); + saveProviderMetrics( + "WeeklyProviderActivity", + weeklyProviderId, + providerAddr, + ["totalProofs", "totalRootsProved"], + [BigInt.fromI32(1), BigInt.fromI32(uniqueRoots.size)], + ["add", "add"] + ); + saveProviderMetrics( + "MonthlyProviderActivity", + monthlyProviderId, + providerAddr, + ["totalProofs", "totalRootsProved"], + [BigInt.fromI32(1), BigInt.fromI32(uniqueRoots.size)], + ["add", "add"] + ); + saveProofSetMetrics( + "WeeklyProofSetActivity", + weeklyProofSetId, + setId, + ["totalProofs", "totalRootsProved"], + [BigInt.fromI32(1), BigInt.fromI32(uniqueRoots.size)], + ["add", "add"] + ); + saveProofSetMetrics( + "MonthlyProofSetActivity", + monthlyProofSetId, + setId, + ["totalProofs", "totalRootsProved"], + [BigInt.fromI32(1), BigInt.fromI32(uniqueRoots.size)], + ["add", "add"] + ); } else { log.warning("PossessionProven: ProofSet {} not found", [setId.toString()]); } @@ -933,6 +983,9 @@ export function handleRootsAdded(event: RootsAddedEvent): void { const provider = Provider.load(proofSet.owner); if (provider) { provider.totalDataSize = provider.totalDataSize.plus(totalDataSizeAdded); + provider.totalRoots = provider.totalRoots.plus( + BigInt.fromI32(addedRootCount) + ); provider.updatedAt = event.block.timestamp; provider.blockNumber = event.block.number; provider.save(); @@ -953,6 +1006,47 @@ export function handleRootsAdded(event: RootsAddedEvent): void { ], ["add", "add", "add"] ); + + // update provider and proof set metrics + const weekId = event.block.timestamp.toI32() / 604800; + const monthId = event.block.timestamp.toI32() / 2592000; + const providerId = proofSet.owner; + const weeklyProviderId = Bytes.fromI32(weekId).concat(providerId); + const monthlyProviderId = Bytes.fromI32(monthId).concat(providerId); + const weeklyProofSetId = Bytes.fromI32(weekId).concat(proofSetEntityId); + const monthlyProofSetId = Bytes.fromI32(monthId).concat(proofSetEntityId); + saveProviderMetrics( + "WeeklyProviderActivity", + weeklyProviderId, + providerId, + ["totalRootsAdded", "totalDataSizeAdded"], + [BigInt.fromI32(addedRootCount), totalDataSizeAdded], + ["add", "add"] + ); + saveProviderMetrics( + "MonthlyProviderActivity", + monthlyProviderId, + providerId, + ["totalRootsAdded", "totalDataSizeAdded"], + [BigInt.fromI32(addedRootCount), totalDataSizeAdded], + ["add", "add"] + ); + saveProofSetMetrics( + "WeeklyProofSetActivity", + weeklyProofSetId, + setId, + ["totalRootsAdded", "totalDataSizeAdded"], + [BigInt.fromI32(addedRootCount), totalDataSizeAdded], + ["add", "add"] + ); + saveProofSetMetrics( + "MonthlyProofSetActivity", + monthlyProofSetId, + setId, + ["totalRootsAdded", "totalDataSizeAdded"], + [BigInt.fromI32(addedRootCount), totalDataSizeAdded], + ["add", "add"] + ); } export function handleRootsRemoved(event: RootsRemovedEvent): void { @@ -1060,6 +1154,17 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { ); provider.totalDataSize = BigInt.fromI32(0); } + provider.totalRoots = provider.totalRoots.minus( + BigInt.fromI32(removedRootCount) + ); + // Ensure provider totalRoots doesn't go negative + if (provider.totalRoots.lt(BigInt.fromI32(0))) { + log.warning( + "handleRootsRemoved: Provider {} totalRoots went negative. Setting to 0.", + [proofSet.owner.toHex()] + ); + provider.totalRoots = BigInt.fromI32(0); + } provider.updatedAt = event.block.timestamp; provider.blockNumber = event.block.number; provider.save(); @@ -1076,6 +1181,47 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { [BigInt.fromI32(removedRootCount), removedDataSize], ["subtract", "subtract"] ); + + // Update provider and proof set metrics + const weekId = event.block.timestamp.toI32() / 604800; + const monthId = event.block.timestamp.toI32() / 2592000; + const providerId = proofSet.owner; + const weeklyProviderId = Bytes.fromI32(weekId).concat(providerId); + const monthlyProviderId = Bytes.fromI32(monthId).concat(providerId); + const weeklyProofSetId = Bytes.fromI32(weekId).concat(proofSetEntityId); + const monthlyProofSetId = Bytes.fromI32(monthId).concat(proofSetEntityId); + saveProviderMetrics( + "WeeklyProviderActivity", + weeklyProviderId, + providerId, + ["totalRootsRemoved", "totalDataSizeRemoved"], + [BigInt.fromI32(removedRootCount), removedDataSize], + ["add", "add"] + ); + saveProviderMetrics( + "MonthlyProviderActivity", + monthlyProviderId, + providerId, + ["totalRootsRemoved", "totalDataSizeRemoved"], + [BigInt.fromI32(removedRootCount), removedDataSize], + ["add", "add"] + ); + saveProofSetMetrics( + "WeeklyProofSetActivity", + weeklyProofSetId, + setId, + ["totalRootsRemoved", "totalDataSizeRemoved"], + [BigInt.fromI32(removedRootCount), removedDataSize], + ["add", "add"] + ); + saveProofSetMetrics( + "MonthlyProofSetActivity", + monthlyProofSetId, + setId, + ["totalRootsRemoved", "totalDataSizeRemoved"], + [BigInt.fromI32(removedRootCount), removedDataSize], + ["add", "add"] + ); } // Helper function to read Uint256 from Bytes at a specific offset From 8adb3559f9c22ef08dbc7fa430d6c9c533b70113 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Tue, 22 Apr 2025 00:36:15 +0530 Subject: [PATCH 10/51] fix handleFaultRecord and other bugs --- subgraph/schema.graphql | 20 ++++--- subgraph/src/helper.ts | 8 +-- subgraph/src/pdp-service.ts | 74 ++++++++++++------------ subgraph/src/pdp-verifier.ts | 107 +++++++++++++++++------------------ subgraph/subgraph.yaml | 2 + 5 files changed, 108 insertions(+), 103 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index e8030fe..a63f56f 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -14,6 +14,8 @@ type ProofSet @entity(immutable: false) { totalProvedRoots: BigInt! # uint256 totalFeePaid: BigInt! # uint256 totalFaultedPeriods: BigInt! # uint256 + totalTransactions: BigInt! # uint256 + totalEventLogs: BigInt! # uint256 createdAt: BigInt! updatedAt: BigInt! blockNumber: BigInt! @@ -162,7 +164,7 @@ type NetworkMetric @entity(immutable: false) { totalProofFeePaidInFil: BigInt # uint256 totalProofs: BigInt # uint256 totalProvedRoots: BigInt # uint256 - totalPeriodsFaulted: BigInt # uint256 + totalFaultedPeriods: BigInt # uint256 totalFaultedRoots: BigInt # uint256 } @@ -176,8 +178,8 @@ type WeeklyProviderActivity @entity(immutable: false) { totalProofSetsCreated: BigInt! # uint256 totalProofs: BigInt! # uint256 totalRootsProved: BigInt! # uint256 - totalRootsFaulted: BigInt! # uint256 - totalPeriodsFaulted: BigInt! # uint256 + totalFaultedRoots: BigInt! # uint256 + totalFaultedPeriods: BigInt! # uint256 # Relationships provider: Provider! # Link to Provider (stores Provider ID) } @@ -192,8 +194,8 @@ type MonthlyProviderActivity @entity(immutable: false) { totalDataSizeRemoved: BigInt! # uint256 totalProofs: BigInt! # uint256 totalRootsProved: BigInt! # uint256 - totalRootsFaulted: BigInt! # uint256 - totalPeriodsFaulted: BigInt! # uint256 + totalFaultedRoots: BigInt! # uint256 + totalFaultedPeriods: BigInt! # uint256 # Relationships provider: Provider! # Link to Provider (stores Provider ID) } @@ -207,8 +209,8 @@ type WeeklyProofSetActivity @entity(immutable: false) { totalDataSizeRemoved: BigInt! # uint256 totalProofs: BigInt! # uint256 totalRootsProved: BigInt! # uint256 - totalRootsFaulted: BigInt! # uint256 - totalPeriodsFaulted: BigInt! # uint256 + totalFaultedRoots: BigInt! # uint256 + totalFaultedPeriods: BigInt! # uint256 # Relationships proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) } @@ -222,8 +224,8 @@ type MonthlyProofSetActivity @entity(immutable: false) { totalDataSizeRemoved: BigInt! # uint256 totalProofs: BigInt! # uint256 totalRootsProved: BigInt! # uint256 - totalRootsFaulted: BigInt! # uint256 - totalPeriodsFaulted: BigInt! # uint256 + totalFaultedRoots: BigInt! # uint256 + totalFaultedPeriods: BigInt! # uint256 # Relationships proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) } diff --git a/subgraph/src/helper.ts b/subgraph/src/helper.ts index 10c9fa9..17f7f73 100644 --- a/subgraph/src/helper.ts +++ b/subgraph/src/helper.ts @@ -108,8 +108,8 @@ export function saveProviderMetrics( "totalProofSetsCreated", "totalProofs", "totalRootsProved", - "totalRootsFaulted", - "totalPeriodsFaulted", + "totalFaultedRoots", + "totalFaultedPeriods", "totalRootsRemoved", "totalDataSizeRemoved", ]; @@ -196,8 +196,8 @@ export function saveProofSetMetrics( "totalDataSizeAdded", "totalProofs", "totalRootsProved", - "totalRootsFaulted", - "totalPeriodsFaulted", + "totalFaultedRoots", + "totalFaultedPeriods", "totalRootsRemoved", "totalDataSizeRemoved", ]; diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index bd3c578..f59a765 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -17,11 +17,11 @@ import { // --- Helper Functions function getProofSetEntityId(setId: BigInt): Bytes { - return Bytes.fromBigInt(setId) as Bytes; + return Bytes.fromByteArray(Bytes.fromBigInt(setId)); } function getRootEntityId(setId: BigInt, rootId: BigInt): Bytes { - return Bytes.fromBigInt(setId).concat(Bytes.fromBigInt(rootId)) as Bytes; + return Bytes.fromUTF8(setId.toString() + "-" + rootId.toString()); } function getTransactionEntityId(txHash: Bytes): Bytes { @@ -55,19 +55,35 @@ export function generateChallengeIndex( ): BigInt { const data = new Uint8Array(32 + 32 + 8); - data.set(seed, 0); + // Ensure seed is 32 bytes. Log if not, but proceed cautiously. + if (seed.length != 32) { + log.warning("generateChallengeIndex: Seed length is not 32 bytes: {}", [ + seed.length.toString(), + ]); + } + // Only copy up to 32 bytes, or less if seed is shorter. + data.set(seed.slice(0, 32), 0); - const psIDBuf = padTo32Bytes( - Bytes.fromUint8Array(Bytes.fromBigInt(proofSetID)) - ); - data.set(psIDBuf, 32); + // Convert proofSetID to Bytes and pad to 32 bytes (Big-Endian padding implied by padTo32Bytes) + const psIDBytes = Bytes.fromBigInt(proofSetID); + const psIDPadded = padTo32Bytes(psIDBytes); + data.set(psIDPadded, 32); // Write 32 bytes at offset 32 + + // Convert proofIndex (i32) to an 8-byte Uint8Array (uint64 Big-Endian) + const idxBuf = new Uint8Array(8); // Create 8-byte buffer, initialized to zeros + idxBuf[7] = u8(proofIndex & 0xff); // Least significant byte + idxBuf[6] = u8((proofIndex >> 8) & 0xff); + idxBuf[5] = u8((proofIndex >> 16) & 0xff); + idxBuf[4] = u8((proofIndex >> 24) & 0xff); // Most significant byte of the i32 - const idxBuf = padTo32Bytes(Bytes.fromUint8Array(Bytes.fromI32(proofIndex))); - data.set(idxBuf, 64); + data.set(idxBuf, 64); // Write the 8 bytes at offset 64 const hashBytes = crypto.keccak256(Bytes.fromUint8Array(data)); + // hashBytes is big-endian, so expected to be reversed + const hashIntUnsignedR = BigInt.fromUnsignedBytes( + Bytes.fromUint8Array(Bytes.fromHexString(hashBytes.toHexString()).reverse()) + ); - const hashInt = BigInt.fromByteArray(hashBytes); if (totalLeaves.isZero()) { log.error( "generateChallengeIndex: totalLeaves is zero, cannot calculate modulus. ProofSetID: {}. Seed: {}", @@ -75,7 +91,8 @@ export function generateChallengeIndex( ); return BigInt.fromI32(0); } - const challengeIndex = hashInt.mod(totalLeaves); + + const challengeIndex = hashIntUnsignedR.mod(totalLeaves); return challengeIndex; } @@ -88,14 +105,15 @@ export function findChallengedRoots( Address.fromBytes(Bytes.fromHexString(PDPVerifierAddress)) ); - const seedInt = instance.try_getRandomness(challengeEpoch); - if (seedInt.reverted || seedInt.value.isZero()) { + const seedInt = instance.getRandomness(challengeEpoch); + const seedHex = seedInt.toHex().padStart(66, "0"); + + if (!seedInt) { log.warning("findChallengedRoots: Failed to get randomness for epoch {}", [ challengeEpoch.toString(), ]); return []; } - const seed = Bytes.fromBigInt(seedInt.value); const challenges: BigInt[] = []; if (totalLeaves.isZero()) { @@ -107,7 +125,7 @@ export function findChallengedRoots( } for (let i = 0; i < NumChallenges; i++) { const leafIdx = generateChallengeIndex( - seed, + Bytes.fromHexString(seedHex), proofSetId, i32(i), totalLeaves @@ -115,15 +133,14 @@ export function findChallengedRoots( challenges.push(leafIdx); } - const rootIdsResult = instance.try_findRootIds(proofSetId, challenges); - if (rootIdsResult.reverted) { + const rootIds = instance.findRootIds(proofSetId, challenges); + if (!rootIds) { log.warning("findChallengedRoots: findRootIds reverted for proofSetId {}", [ proofSetId.toString(), ]); return []; } - const rootIds = rootIdsResult.value; const rootIdsArray: BigInt[] = []; for (let i = 0; i < rootIds.length; i++) { rootIdsArray.push(rootIds[i].rootId); @@ -168,16 +185,9 @@ export function handleFaultRecord(event: FaultRecordEvent): void { if (inputData.length >= 4 + 32) { const potentialNextEpochBytes = inputData.slice(4 + 32, 4 + 32 + 32); if (potentialNextEpochBytes.length == 32) { + // Convert reversed Uint8Array to Bytes before converting to BigInt nextChallengeEpoch = BigInt.fromUnsignedBytes( - potentialNextEpochBytes.reverse() as Bytes - ); - log.info("handleFaultRecord: Parsed potential nextChallengeEpoch: {}", [ - nextChallengeEpoch.toString(), - ]); - } else { - log.warning( - "handleFaultRecord: Could not slice expected 32 bytes for nextChallengeEpoch from input data.", - [] + Bytes.fromUint8Array(potentialNextEpochBytes.reverse()) ); } } else { @@ -206,15 +216,6 @@ export function handleFaultRecord(event: FaultRecordEvent): void { } } - log.info( - "handleFaultRecord: Found {} unique roots potentially faulted for epoch {} in ProofSet {}", - [ - uniqueRootIds.length.toString(), - challengeEpoch.toString(), - setId.toString(), - ] - ); - let rootEntityIds: Bytes[] = []; for (let i = 0; i < uniqueRootIds.length; i++) { const rootId = uniqueRootIds[i]; @@ -263,6 +264,7 @@ export function handleFaultRecord(event: FaultRecordEvent): void { proofSet.totalFaultedPeriods = proofSet.totalFaultedPeriods.plus(periodsFaultedParam); + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index d7b7638..f11a426 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -24,26 +24,22 @@ import { saveProofSetMetrics, saveNetworkMetrics, } from "./helper"; +import { LeafSize } from "../utils"; // --- Helper Functions for ID Generation --- function getProofSetEntityId(setId: BigInt): Bytes { - // Use setId directly as the entity ID as per schema comment return Bytes.fromByteArray(Bytes.fromBigInt(setId)); } function getRootEntityId(setId: BigInt, rootId: BigInt): Bytes { - // Combine setId and rootId for a unique Root entity ID - // Using a separator to avoid collisions, e.g., setId=1, rootId=23 vs setId=12, rootId=3 return Bytes.fromUTF8(setId.toString() + "-" + rootId.toString()); } function getTransactionEntityId(txHash: Bytes): Bytes { - // Use tx hash as the entity ID return txHash; } function getEventLogEntityId(txHash: Bytes, logIndex: BigInt): Bytes { - // Combine tx hash and log index for a unique EventLog entity ID return txHash.concatI32(logIndex.toI32()); } @@ -52,14 +48,12 @@ function getProofEntityId( logIndex: BigInt, index: i32 = 0 ): Bytes { - // Combine txHash, logIndex, and an optional index for uniqueness within the event return txHash .concat(Bytes.fromByteArray(Bytes.fromBigInt(logIndex))) .concatI32(index); } function getProofFeeEntityId(txHash: Bytes, logIndex: BigInt): Bytes { - // Use tx hash and log index for ProofFee ID return txHash.concatI32(logIndex.toI32()); } @@ -90,12 +84,7 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { eventLog.setId = event.params.setId; // Keep raw ID for potential filtering eventLog.address = event.address; eventLog.name = "ProofSetCreated"; - eventLog.data = - "{setId:" + - event.params.setId.toString() + - ",owner:" + - event.params.owner.toHexString() + - "}"; + eventLog.data = `{"setId":"${event.params.setId.toString()}","owner":"${event.params.owner.toHexString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; // Keep raw hash eventLog.createdAt = event.block.timestamp; @@ -140,6 +129,8 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { proofSet.totalFaultedPeriods = BigInt.fromI32(0); proofSet.totalProofs = BigInt.fromI32(0); proofSet.totalProvedRoots = BigInt.fromI32(0); + proofSet.totalTransactions = BigInt.fromI32(1); + proofSet.totalEventLogs = BigInt.fromI32(1); proofSet.createdAt = event.block.timestamp; proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; @@ -223,12 +214,7 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "ProofSetDeleted"; - eventLog.data = - "{setId:" + - setId.toString() + - ",deletedLeafCount:" + - deletedLeafCount.toString() + - "}"; + eventLog.data = `{"setId":"${setId.toString()}","deletedLeafCount":"${deletedLeafCount.toString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; @@ -291,6 +277,10 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { proofSet.totalDataSize = BigInt.fromI32(0); proofSet.nextChallengeEpoch = BigInt.fromI32(0); proofSet.lastProvenEpoch = BigInt.fromI32(0); + proofSet.totalTransactions = proofSet.totalTransactions.plus( + BigInt.fromI32(1) + ); + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); @@ -319,14 +309,7 @@ export function handleProofSetOwnerChanged( eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "ProofSetOwnerChanged"; - eventLog.data = - "{setId:" + - setId.toString() + - ",oldOwner:" + - oldOwner.toHexString() + - ",newOwner:" + - newOwner.toHexString() + - "}"; + eventLog.data = `{"setId":"${setId.toString()}","oldOwner":"${oldOwner.toHexString()}","newOwner":"${newOwner.toHexString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; @@ -401,6 +384,10 @@ export function handleProofSetOwnerChanged( // Update ProofSet Owner (this updates the derived relationship on both old and new Provider) proofSet.owner = newOwner; // Set owner to the new provider's ID + proofSet.totalTransactions = proofSet.totalTransactions.plus( + BigInt.fromI32(1) + ); + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); @@ -459,6 +446,7 @@ export function handleProofFeePaid(event: ProofFeePaidEvent): void { const proofSet = ProofSet.load(proofSetEntityId); if (proofSet) { proofSet.totalFeePaid = proofSet.totalFeePaid.plus(fee); + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); @@ -482,7 +470,7 @@ export function handleProofSetEmpty(event: ProofSetEmptyEvent): void { eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "ProofSetEmpty"; - eventLog.data = "{setId:" + setId.toString() + "}"; + eventLog.data = `{"setId":"${setId.toString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; @@ -500,7 +488,7 @@ export function handleProofSetEmpty(event: ProofSetEmptyEvent): void { proofSet.totalRoots = BigInt.fromI32(0); proofSet.totalDataSize = BigInt.fromI32(0); proofSet.leafCount = BigInt.fromI32(0); - // Consider if other fields like lastProvenEpoch should be reset + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); @@ -553,7 +541,7 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { // Store challenges as a simple string representation for the log let challengesStr = "["; for (let i = 0; i < challenges.length; i++) { - challengesStr += `{rootId:${challenges[i].rootId.toString()},offset:${challenges[i].offset.toString()}}`; + challengesStr += `{"rootId":${challenges[i].rootId.toString()},"offset":${challenges[i].offset.toString()}}`; if (i < challenges.length - 1) { challengesStr += ","; } @@ -586,7 +574,8 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { transaction.save(); } - const uniqueRoots = new Set(); + const uniqueRoots = new Map(); + // Process each challenge for (let i = 0; i < challenges.length; i++) { const challenge = challenges[i]; @@ -611,7 +600,10 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { proof.root = rootEntityId; proof.save(); - uniqueRoots.add(rootId); + const rootIdStr = rootId.toString(); + if (!uniqueRoots.has(rootIdStr)) { + uniqueRoots.set(rootIdStr, true); + } // Update corresponding Root entity const root = Root.load(rootEntityId); @@ -621,19 +613,6 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { root.totalProofsSubmitted = root.totalProofsSubmitted.plus( BigInt.fromI32(1) ); - - // Clear fault info if it was previously marked as faulted *for this epoch* - // Assumes fault recording logic uses block number as epoch - if (root.lastFaultedEpoch.equals(currentBlockNumber)) { - log.info("PossessionProven: Clearing fault for root {} in epoch {}", [ - rootId.toString(), - currentBlockNumber.toString(), - ]); - root.lastFaultedEpoch = BigInt.fromI32(0); // Reset fault epoch - root.lastFaultedAt = BigInt.fromI32(0); // Reset fault timestamp - // Adjusting totalPeriodsFaulted likely happens elsewhere (e.g., during fault recording or epoch change) - } - root.updatedAt = currentTimestamp; root.blockNumber = currentBlockNumber; root.save(); @@ -653,6 +632,10 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { BigInt.fromI32(uniqueRoots.size) ); proofSet.totalProofs = proofSet.totalProofs.plus(BigInt.fromI32(1)); + proofSet.totalTransactions = proofSet.totalTransactions.plus( + BigInt.fromI32(1) + ); + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = currentTimestamp; proofSet.blockNumber = currentBlockNumber; proofSet.save(); @@ -712,6 +695,7 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { const setId = event.params.setId; const challengeEpoch = event.params.challengeEpoch; + const leafCount = event.params.leafCount; const proofSetEntityId = getProofSetEntityId(setId); const eventLogEntityId = getEventLogEntityId( @@ -725,7 +709,7 @@ export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { eventLog.setId = setId; eventLog.address = event.address; eventLog.name = "NextProvingPeriod"; - eventLog.data = `{"setId":"${setId.toString()}","challengeEpoch":"${challengeEpoch.toString()}"}`; + eventLog.data = `{"setId":"${setId.toString()}","challengeEpoch":"${challengeEpoch.toString()}","leafCount":"${leafCount.toString()}"}`; eventLog.logIndex = event.logIndex; eventLog.transactionHash = event.transaction.hash; eventLog.createdAt = event.block.timestamp; @@ -756,19 +740,17 @@ export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { const proofSet = ProofSet.load(proofSetEntityId); if (proofSet) { proofSet.nextChallengeEpoch = challengeEpoch; - // Resetting totalProvedRoots might depend on whether it's per-epoch or cumulative. - // Assuming per-epoch for now, reset it here. - // proofSet.totalProvedRoots = BigInt.fromI32(0); + proofSet.challengeRange = leafCount; + proofSet.totalTransactions = proofSet.totalTransactions.plus( + BigInt.fromI32(1) + ); + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); } else { log.warning("NextProvingPeriod: ProofSet {} not found", [setId.toString()]); } - // Note: This event might also signify the end of the *previous* epoch. - // Logic could be added here to check Roots associated with this ProofSet - // and mark any that weren't proven in the previous epoch (proofSet.lastProvenEpoch) - // as faulted for that epoch. This depends on the exact fault mechanism. } export function handleRootsAdded(event: RootsAddedEvent): void { @@ -975,6 +957,13 @@ export function handleRootsAdded(event: RootsAddedEvent): void { BigInt.fromI32(addedRootCount) ); // Use correct field name proofSet.totalDataSize = proofSet.totalDataSize.plus(totalDataSizeAdded); + proofSet.leafCount = proofSet.leafCount.plus( + totalDataSizeAdded.div(BigInt.fromI32(LeafSize)) + ); + proofSet.totalTransactions = proofSet.totalTransactions.plus( + BigInt.fromI32(1) + ); + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); @@ -1120,6 +1109,9 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { BigInt.fromI32(removedRootCount) ); // Use correct field name proofSet.totalDataSize = proofSet.totalDataSize.minus(removedDataSize); + proofSet.leafCount = proofSet.leafCount.minus( + removedDataSize.div(BigInt.fromI32(LeafSize)) + ); // Ensure stats don't go negative if (proofSet.totalRoots.lt(BigInt.fromI32(0))) { @@ -1137,7 +1129,14 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { ); proofSet.totalDataSize = BigInt.fromI32(0); } - + if (proofSet.leafCount.lt(BigInt.fromI32(0))) { + log.warning( + "handleRootsRemoved: ProofSet {} leafCount went negative. Setting to 0.", + [setId.toString()] + ); + proofSet.leafCount = BigInt.fromI32(0); + } + proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); proofSet.updatedAt = event.block.timestamp; proofSet.blockNumber = event.block.number; proofSet.save(); diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index 5c1e765..08acb81 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -66,6 +66,8 @@ dataSources: abis: - name: PDPService file: ./abis/PDPService.json + - name: PDPVerifier + file: ./abis/PDPVerifier.json eventHandlers: - event: "FaultRecord(indexed uint256,uint256,uint256)" handler: handleFaultRecord From 7c68233683e84bb84196808033300f563163a534 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Tue, 22 Apr 2025 01:48:15 +0530 Subject: [PATCH 11/51] pdp subgraph integration with client --- subgraph-client/.env.example | 6 + subgraph-client/.eslintrc.cjs | 18 + subgraph-client/.gitignore | 26 + subgraph-client/.prettierignore | 4 + subgraph-client/.prettierrc | 6 + subgraph-client/Dockerfile | 23 + subgraph-client/components.json | 18 + subgraph-client/index.html | 26 + subgraph-client/package-lock.json | 11485 ++++++++++++++++ subgraph-client/package.json | 67 + subgraph-client/postcss.config.js | 6 + subgraph-client/prettier.config.js | 33 + .../public/fonts/GeistVariableVF.woff2 | Bin 0 -> 53444 bytes subgraph-client/public/robots.txt | 2 + subgraph-client/public/site.webmanifest | 1 + subgraph-client/src/App.tsx | 14 + subgraph-client/src/api/apiService.ts | 67 + .../components/Landing/NetworkStatsCard.tsx | 109 + .../Landing/RecentProofSetsTable.tsx | 135 + .../Landing/RecentProvidersTable.tsx | 110 + .../ProofSetDetails/ActivityTabs.tsx | 290 + .../ProofSetDetails/HeatmapSection.tsx | 110 + .../ProofSetDetails/JsonDisplay.tsx | 17 + .../ProofSetDetails/ProofHeatmap.tsx | 115 + .../ProofSetDetails/ProofSetActivityChart.tsx | 204 + .../ProofSetDetails/ProofSetOverview.tsx | 130 + .../components/ProofSetDetails/RootsTable.tsx | 190 + .../components/ProofSets/ProofSetsTable.tsx | 146 + .../ProviderDetails/ProviderActivityChart.tsx | 203 + .../ProviderDetails/ProviderOverviewCard.tsx | 94 + .../ProviderProofSetsTable.tsx | 164 + .../components/Providers/ProvidersTable.tsx | 141 + .../src/components/shared/Footer.tsx | 12 + .../src/components/shared/Header.tsx | 7 + .../src/components/shared/ThemeProvider.tsx | 74 + .../src/components/shared/ThemeToggle.tsx | 37 + subgraph-client/src/components/ui/alert.tsx | 59 + subgraph-client/src/components/ui/button.tsx | 56 + subgraph-client/src/components/ui/card.tsx | 59 + subgraph-client/src/components/ui/chart.tsx | 365 + .../src/components/ui/collapsible.tsx | 9 + subgraph-client/src/components/ui/command.tsx | 153 + subgraph-client/src/components/ui/dialog.tsx | 120 + .../src/components/ui/dropdown-menu.tsx | 198 + subgraph-client/src/components/ui/input.tsx | 22 + .../src/components/ui/pagination.tsx | 74 + subgraph-client/src/components/ui/select.tsx | 116 + .../src/components/ui/skeleton.tsx | 15 + subgraph-client/src/components/ui/sonner.tsx | 29 + subgraph-client/src/components/ui/tabs.tsx | 52 + subgraph-client/src/components/ui/tooltip.tsx | 21 + subgraph-client/src/data/dummyData.ts | 98 + subgraph-client/src/hooks/useDebounce.ts | 17 + subgraph-client/src/hooks/useGraphQL.ts | 31 + .../src/hooks/useProofSetDetails.tsx | 187 + .../src/hooks/useProviderPageData.tsx | 109 + .../src/hooks/useWeeklyProviderActivities.ts | 29 + subgraph-client/src/lib/utils.ts | 6 + subgraph-client/src/main.tsx | 28 + subgraph-client/src/pages/Landing.tsx | 288 + subgraph-client/src/pages/ProofSetDetails.tsx | 129 + subgraph-client/src/pages/ProofSets.tsx | 89 + subgraph-client/src/pages/ProviderDetails.tsx | 68 + subgraph-client/src/pages/Providers.tsx | 100 + subgraph-client/src/router/Layout.tsx | 14 + subgraph-client/src/router/routes.tsx | 21 + subgraph-client/src/styles/index.css | 168 + .../src/utility/axiosInterceptor.ts | 35 + subgraph-client/src/utility/constants.ts | 41 + subgraph-client/src/utility/fetcher.ts | 12 + .../src/utility/generalServices.ts | 61 + subgraph-client/src/utility/helper.ts | 179 + subgraph-client/src/utility/queries.ts | 194 + subgraph-client/src/utility/types.ts | 115 + subgraph-client/src/vite-env.d.ts | 11 + subgraph-client/tailwind.config.js | 126 + subgraph-client/tsconfig.json | 31 + subgraph-client/tsconfig.node.json | 11 + subgraph-client/vite.config.ts | 70 + 79 files changed, 17706 insertions(+) create mode 100644 subgraph-client/.env.example create mode 100644 subgraph-client/.eslintrc.cjs create mode 100644 subgraph-client/.gitignore create mode 100644 subgraph-client/.prettierignore create mode 100644 subgraph-client/.prettierrc create mode 100644 subgraph-client/Dockerfile create mode 100644 subgraph-client/components.json create mode 100644 subgraph-client/index.html create mode 100644 subgraph-client/package-lock.json create mode 100644 subgraph-client/package.json create mode 100644 subgraph-client/postcss.config.js create mode 100644 subgraph-client/prettier.config.js create mode 100644 subgraph-client/public/fonts/GeistVariableVF.woff2 create mode 100644 subgraph-client/public/robots.txt create mode 100644 subgraph-client/public/site.webmanifest create mode 100644 subgraph-client/src/App.tsx create mode 100644 subgraph-client/src/api/apiService.ts create mode 100644 subgraph-client/src/components/Landing/NetworkStatsCard.tsx create mode 100644 subgraph-client/src/components/Landing/RecentProofSetsTable.tsx create mode 100644 subgraph-client/src/components/Landing/RecentProvidersTable.tsx create mode 100644 subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx create mode 100644 subgraph-client/src/components/ProofSetDetails/HeatmapSection.tsx create mode 100644 subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx create mode 100644 subgraph-client/src/components/ProofSetDetails/ProofHeatmap.tsx create mode 100644 subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx create mode 100644 subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx create mode 100644 subgraph-client/src/components/ProofSetDetails/RootsTable.tsx create mode 100644 subgraph-client/src/components/ProofSets/ProofSetsTable.tsx create mode 100644 subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx create mode 100644 subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx create mode 100644 subgraph-client/src/components/ProviderDetails/ProviderProofSetsTable.tsx create mode 100644 subgraph-client/src/components/Providers/ProvidersTable.tsx create mode 100644 subgraph-client/src/components/shared/Footer.tsx create mode 100644 subgraph-client/src/components/shared/Header.tsx create mode 100644 subgraph-client/src/components/shared/ThemeProvider.tsx create mode 100644 subgraph-client/src/components/shared/ThemeToggle.tsx create mode 100644 subgraph-client/src/components/ui/alert.tsx create mode 100644 subgraph-client/src/components/ui/button.tsx create mode 100644 subgraph-client/src/components/ui/card.tsx create mode 100644 subgraph-client/src/components/ui/chart.tsx create mode 100644 subgraph-client/src/components/ui/collapsible.tsx create mode 100644 subgraph-client/src/components/ui/command.tsx create mode 100644 subgraph-client/src/components/ui/dialog.tsx create mode 100644 subgraph-client/src/components/ui/dropdown-menu.tsx create mode 100644 subgraph-client/src/components/ui/input.tsx create mode 100644 subgraph-client/src/components/ui/pagination.tsx create mode 100644 subgraph-client/src/components/ui/select.tsx create mode 100644 subgraph-client/src/components/ui/skeleton.tsx create mode 100644 subgraph-client/src/components/ui/sonner.tsx create mode 100644 subgraph-client/src/components/ui/tabs.tsx create mode 100644 subgraph-client/src/components/ui/tooltip.tsx create mode 100644 subgraph-client/src/data/dummyData.ts create mode 100644 subgraph-client/src/hooks/useDebounce.ts create mode 100644 subgraph-client/src/hooks/useGraphQL.ts create mode 100644 subgraph-client/src/hooks/useProofSetDetails.tsx create mode 100644 subgraph-client/src/hooks/useProviderPageData.tsx create mode 100644 subgraph-client/src/hooks/useWeeklyProviderActivities.ts create mode 100644 subgraph-client/src/lib/utils.ts create mode 100644 subgraph-client/src/main.tsx create mode 100644 subgraph-client/src/pages/Landing.tsx create mode 100644 subgraph-client/src/pages/ProofSetDetails.tsx create mode 100644 subgraph-client/src/pages/ProofSets.tsx create mode 100644 subgraph-client/src/pages/ProviderDetails.tsx create mode 100644 subgraph-client/src/pages/Providers.tsx create mode 100644 subgraph-client/src/router/Layout.tsx create mode 100644 subgraph-client/src/router/routes.tsx create mode 100644 subgraph-client/src/styles/index.css create mode 100644 subgraph-client/src/utility/axiosInterceptor.ts create mode 100644 subgraph-client/src/utility/constants.ts create mode 100644 subgraph-client/src/utility/fetcher.ts create mode 100644 subgraph-client/src/utility/generalServices.ts create mode 100644 subgraph-client/src/utility/helper.ts create mode 100644 subgraph-client/src/utility/queries.ts create mode 100644 subgraph-client/src/utility/types.ts create mode 100644 subgraph-client/src/vite-env.d.ts create mode 100644 subgraph-client/tailwind.config.js create mode 100644 subgraph-client/tsconfig.json create mode 100644 subgraph-client/tsconfig.node.json create mode 100644 subgraph-client/vite.config.ts diff --git a/subgraph-client/.env.example b/subgraph-client/.env.example new file mode 100644 index 0000000..392e683 --- /dev/null +++ b/subgraph-client/.env.example @@ -0,0 +1,6 @@ +VITE_SERVER_URL=http://localhost:8080 +VITE_NETWORK=calibration # or mainnet +VITE_PDP_VERIFIER= # pdp verifier contract address +VITE_PDP_SERVICE= # pdp simple service contract address +VITE_GOLDSKY_PROJECT_ID= # goldsky project id ( subgraph project id ) +VITE_GOLDSKY_PROJECT_NAME= # goldsky project name ( subgraph project name ) \ No newline at end of file diff --git a/subgraph-client/.eslintrc.cjs b/subgraph-client/.eslintrc.cjs new file mode 100644 index 0000000..d6c9537 --- /dev/null +++ b/subgraph-client/.eslintrc.cjs @@ -0,0 +1,18 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, +} diff --git a/subgraph-client/.gitignore b/subgraph-client/.gitignore new file mode 100644 index 0000000..3b0b403 --- /dev/null +++ b/subgraph-client/.gitignore @@ -0,0 +1,26 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env \ No newline at end of file diff --git a/subgraph-client/.prettierignore b/subgraph-client/.prettierignore new file mode 100644 index 0000000..e118dbe --- /dev/null +++ b/subgraph-client/.prettierignore @@ -0,0 +1,4 @@ +node_modules +# Ignore artifacts: +build +coverage diff --git a/subgraph-client/.prettierrc b/subgraph-client/.prettierrc new file mode 100644 index 0000000..66e7e94 --- /dev/null +++ b/subgraph-client/.prettierrc @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": false, + "singleQuote": true +} \ No newline at end of file diff --git a/subgraph-client/Dockerfile b/subgraph-client/Dockerfile new file mode 100644 index 0000000..206c3a7 --- /dev/null +++ b/subgraph-client/Dockerfile @@ -0,0 +1,23 @@ +FROM node:20-alpine AS builder + +WORKDIR /usr/src/pdp-explorer/client +COPY package*.json ./ +RUN npm install +COPY . . +RUN npm run build + +FROM nginx:alpine +COPY --from=builder /usr/src/pdp-explorer/client/dist /usr/share/nginx/html +RUN rm /etc/nginx/conf.d/default.conf + +RUN echo 'server { \ + listen 80; \ + server_name localhost; \ + location / { \ + root /usr/share/nginx/html; \ + index index.html; \ + try_files $uri $uri/ /index.html; \ + } \ +}' > /etc/nginx/conf.d/default.conf + +CMD ["nginx", "-g", "daemon off;"] diff --git a/subgraph-client/components.json b/subgraph-client/components.json new file mode 100644 index 0000000..6f1b7dd --- /dev/null +++ b/subgraph-client/components.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "default", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/styles/index.css", + "baseColor": "slate", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "pages": "@/pages" + } +} \ No newline at end of file diff --git a/subgraph-client/index.html b/subgraph-client/index.html new file mode 100644 index 0000000..0e46619 --- /dev/null +++ b/subgraph-client/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + PDP Explorer + + + +
+ + + + \ No newline at end of file diff --git a/subgraph-client/package-lock.json b/subgraph-client/package-lock.json new file mode 100644 index 0000000..8725a18 --- /dev/null +++ b/subgraph-client/package-lock.json @@ -0,0 +1,11485 @@ +{ + "name": "pdpexplorer", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "pdpexplorer", + "version": "0.0.0", + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/material": "^6.4.4", + "@mui/x-data-grid": "^7.26.0", + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-collapsible": "^1.1.3", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-tooltip": "^1.1.7", + "@types/js-cookie": "^3.0.6", + "@uiw/react-json-view": "^2.0.0-alpha.30", + "@vitejs/plugin-react": "^4.2.1", + "axios": "^1.6.8", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "dotenv": "^16.4.5", + "graphql-request": "^7.1.2", + "js-cookie": "^3.0.5", + "lucide-react": "^0.376.0", + "mini-svg-data-uri": "^1.4.4", + "multiformats": "^13.3.2", + "next-themes": "^0.3.0", + "react": "^18.2.0", + "react-day-picker": "^8.10.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.1", + "recharts": "^2.15.1", + "sonner": "^1.4.3", + "swr": "^2.3.3", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@types/node": "^20.11.20", + "@types/react": "^18.2.56", + "@types/react-dom": "^18.2.19", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", + "@vitejs/plugin-react-swc": "^3.5.0", + "autoprefixer": "^10.4.17", + "eslint": "^8.56.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", + "typescript": "^5.2.2", + "vite": "^5.2.8", + "vite-plugin-pwa": "^0.19.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", + "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.5.tgz", + "integrity": "sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.24.5", + "@babel/helpers": "^7.24.5", + "@babel/parser": "^7.24.5", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.5.tgz", + "integrity": "sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==", + "dependencies": { + "@babel/types": "^7.24.5", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", + "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.24.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", + "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.5.tgz", + "integrity": "sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.24.3", + "@babel/helper-simple-access": "^7.24.5", + "@babel/helper-split-export-declaration": "^7.24.5", + "@babel/helper-validator-identifier": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", + "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", + "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.5.tgz", + "integrity": "sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==", + "dependencies": { + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", + "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", + "dependencies": { + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz", + "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.24.5.tgz", + "integrity": "sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.23.0", + "@babel/template": "^7.24.0", + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.5.tgz", + "integrity": "sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==", + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.5", + "@babel/types": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz", + "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/highlight/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/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz", + "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", + "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", + "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", + "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", + "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", + "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", + "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", + "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", + "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", + "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", + "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", + "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", + "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.4", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", + "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-replace-supers": "^7.24.1", + "@babel/helper-split-export-declaration": "^7.24.5", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/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/plugin-transform-computed-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", + "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/template": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", + "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", + "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", + "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", + "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", + "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", + "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", + "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", + "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", + "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", + "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", + "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", + "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", + "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", + "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", + "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", + "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", + "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", + "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", + "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", + "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", + "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-replace-supers": "^7.24.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", + "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", + "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", + "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", + "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.1", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", + "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.24.5", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", + "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.5.tgz", + "integrity": "sha512-RtCJoUO2oYrYwFPtR1/jkoBEcFuI1ae9a9IMxeyAVa3a1Ap4AnxmyIKG2b2FaJKqkidw/0cxRbWN+HOs6ZWd1w==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", + "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", + "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", + "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", + "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", + "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", + "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", + "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", + "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", + "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", + "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", + "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", + "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.1", + "@babel/plugin-syntax-import-attributes": "^7.24.1", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.1", + "@babel/plugin-transform-async-generator-functions": "^7.24.3", + "@babel/plugin-transform-async-to-generator": "^7.24.1", + "@babel/plugin-transform-block-scoped-functions": "^7.24.1", + "@babel/plugin-transform-block-scoping": "^7.24.5", + "@babel/plugin-transform-class-properties": "^7.24.1", + "@babel/plugin-transform-class-static-block": "^7.24.4", + "@babel/plugin-transform-classes": "^7.24.5", + "@babel/plugin-transform-computed-properties": "^7.24.1", + "@babel/plugin-transform-destructuring": "^7.24.5", + "@babel/plugin-transform-dotall-regex": "^7.24.1", + "@babel/plugin-transform-duplicate-keys": "^7.24.1", + "@babel/plugin-transform-dynamic-import": "^7.24.1", + "@babel/plugin-transform-exponentiation-operator": "^7.24.1", + "@babel/plugin-transform-export-namespace-from": "^7.24.1", + "@babel/plugin-transform-for-of": "^7.24.1", + "@babel/plugin-transform-function-name": "^7.24.1", + "@babel/plugin-transform-json-strings": "^7.24.1", + "@babel/plugin-transform-literals": "^7.24.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", + "@babel/plugin-transform-member-expression-literals": "^7.24.1", + "@babel/plugin-transform-modules-amd": "^7.24.1", + "@babel/plugin-transform-modules-commonjs": "^7.24.1", + "@babel/plugin-transform-modules-systemjs": "^7.24.1", + "@babel/plugin-transform-modules-umd": "^7.24.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.24.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", + "@babel/plugin-transform-numeric-separator": "^7.24.1", + "@babel/plugin-transform-object-rest-spread": "^7.24.5", + "@babel/plugin-transform-object-super": "^7.24.1", + "@babel/plugin-transform-optional-catch-binding": "^7.24.1", + "@babel/plugin-transform-optional-chaining": "^7.24.5", + "@babel/plugin-transform-parameters": "^7.24.5", + "@babel/plugin-transform-private-methods": "^7.24.1", + "@babel/plugin-transform-private-property-in-object": "^7.24.5", + "@babel/plugin-transform-property-literals": "^7.24.1", + "@babel/plugin-transform-regenerator": "^7.24.1", + "@babel/plugin-transform-reserved-words": "^7.24.1", + "@babel/plugin-transform-shorthand-properties": "^7.24.1", + "@babel/plugin-transform-spread": "^7.24.1", + "@babel/plugin-transform-sticky-regex": "^7.24.1", + "@babel/plugin-transform-template-literals": "^7.24.1", + "@babel/plugin-transform-typeof-symbol": "^7.24.5", + "@babel/plugin-transform-unicode-escapes": "^7.24.1", + "@babel/plugin-transform-unicode-property-regex": "^7.24.1", + "@babel/plugin-transform-unicode-regex": "^7.24.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz", + "integrity": "sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==", + "dependencies": { + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.5", + "@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.24.5", + "@babel/parser": "^7.24.5", + "@babel/types": "^7.24.5", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.24.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.5.tgz", + "integrity": "sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==", + "dependencies": { + "@babel/helper-string-parser": "^7.24.1", + "@babel/helper-validator-identifier": "^7.24.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.0.tgz", + "integrity": "sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", + "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.4.tgz", + "integrity": "sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.9.tgz", + "integrity": "sha512-q0umO0+LQK4+p6aGyvzASqKbKOJcAHJ7ycE9CuUvfx3s9zTHWmGJTPOIlM/hmSBfUfg/XfY5YhLBLR/LHwShQQ==", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "license": "MIT", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.4.4.tgz", + "integrity": "sha512-r+J0EditrekkTtO2CnCBCOGpNaDYwJqz8lH4rj6o/anDcskZFJodBlG8aCJkS8DL/CF/9EHS+Gz53EbmYEnQbw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/material": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.4.4.tgz", + "integrity": "sha512-ISVPrIsPQsxnwvS40C4u03AuNSPigFeS2+n1qpuEZ94hDsdMi19dQM2JcC9CHEhXecSIQjP1RTyY0mPiSpSrFQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.4.4", + "@mui/system": "^6.4.3", + "@mui/types": "^7.2.21", + "@mui/utils": "^6.4.3", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.0.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^6.4.3", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, + "node_modules/@mui/private-theming": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.4.3.tgz", + "integrity": "sha512-7x9HaNwDCeoERc4BoEWLieuzKzXu5ZrhRnEM6AUcRXUScQLvF1NFkTlP59+IJfTbEMgcGg1wWHApyoqcksrBpQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/utils": "^6.4.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.4.3.tgz", + "integrity": "sha512-OC402VfK+ra2+f12Gef8maY7Y9n7B6CZcoQ9u7mIkh/7PKwW/xH81xwX+yW+Ak1zBT3HYcVjh2X82k5cKMFGoQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.4.3.tgz", + "integrity": "sha512-Q0iDwnH3+xoxQ0pqVbt8hFdzhq1g2XzzR4Y5pVcICTNtoCLJmpJS3vI4y/OIM1FHFmpfmiEC2IRIq7YcZ8nsmg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.4.3", + "@mui/styled-engine": "^6.4.3", + "@mui/types": "^7.2.21", + "@mui/utils": "^6.4.3", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.21", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.21.tgz", + "integrity": "sha512-6HstngiUxNqLU+/DPqlUJDIPbzUBxIVHb1MmXP0eTWDIROiCR2viugXpEif0PPe2mLqqakPzzRClWAnK+8UJww==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.4.3.tgz", + "integrity": "sha512-jxHRHh3BqVXE9ABxDm+Tc3wlBooYz/4XPa0+4AI+iF38rV1/+btJmSUgG4shDtSWVs/I97aDn5jBCt6SF2Uq2A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/types": "^7.2.21", + "@types/prop-types": "^15.7.14", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils/node_modules/react-is": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", + "integrity": "sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==", + "license": "MIT" + }, + "node_modules/@mui/x-data-grid": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.26.0.tgz", + "integrity": "sha512-9RNQeT2OL6jBOCE0MSUH11ol3fV5Zs9MkGxUIAGXcy/Fui0rZRNFO1yLmWDZU5yvskiNmUZJHWV/qXh++ZFarA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0", + "@mui/x-internals": "7.26.0", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "reselect": "^5.1.1", + "use-sync-external-store": "^1.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0", + "@mui/system": "^5.15.14 || ^6.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/x-internals": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.26.0.tgz", + "integrity": "sha512-VxTCYQcZ02d3190pdvys2TDg9pgbvewAVakEopiOgReKAUhLdRlgGJHcOA/eAuGLyK1YIo26A6Ow6ZKlSRLwMg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", + "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.3.tgz", + "integrity": "sha512-RIQ15mrcvqIkDARJeERSuXSry2N8uYnxkdDetpfmalT/+0ntOXLkFOsh9iwlAsCv+qcmhZjbdJogIm6WBa6c4A==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collapsible": "1.1.3", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-collection": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", + "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-primitive": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", + "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", + "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.3.tgz", + "integrity": "sha512-jFSerheto1X03MUC0g6R7LedNW9EEGWdg9W1+MlpkMLwGkgkbUXLPBH/KIuWKXUoeYRVY11llqbTBDzuLg7qrw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-primitive": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", + "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", + "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", + "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-menu": "2.0.6", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", + "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.6.tgz", + "integrity": "sha512-T6ajELxRvTuAMWH0YmRJ1qez+x4/7Nq7QIx7zJ0VK3qaEWdnWpNbEDnmWldG1zBDwqrLy5aLMUWcoGirVj5kMg==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.5", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.2", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.2", + "@radix-ui/react-portal": "1.1.4", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-arrow": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.2.tgz", + "integrity": "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-collection": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", + "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.5.tgz", + "integrity": "sha512-E4TywXY6UsXNRhFrECa5HAvE5/4BFcGyfTyK36gP+pAW1ed7UTK4vKwdr53gAJYwqbfCWC6ATvJa3J3R/9+Qrg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.2.tgz", + "integrity": "sha512-zxwE80FCU7lcXUGWkdt6XpTTCKPitG1XKOwViTxHVKIJhZl9MvIl2dVHeZENCWD9+EdWv05wlaEkRXUykU27RA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-popper": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.2.tgz", + "integrity": "sha512-Rvqc3nOpwseCyj/rgjlJDYAgyfw7OC1tTkKn2ivhaMGcYt8FSBlahHOZak2i3QwkRXUXgGgzeEe2RuqeEHuHgA==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-portal": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.4.tgz", + "integrity": "sha512-sn2O9k1rPFYVyKd5LAJfo96JlSGVFpa1fS6UuBJfrZadudiw5tAmru+n1x7aMRQ84qDM71Zh1+SzK5QwU0tJfA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-primitive": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", + "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", + "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.2.tgz", + "integrity": "sha512-1SzA4ns2M1aRlvxErqhLHsBHoS5eI5UUcI2awAMgGUp4LoaoWOKYmvqDY2s/tltuPkh3Yk77YF/r3IRj+Amx4Q==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-select/node_modules/react-remove-scroll": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.3.tgz", + "integrity": "sha512-pnAi91oOk8g8ABQKGF5/M9qxmmOPxaAnopyTHYfqYEwJhyFrbbBtHuSgtKEoH0jpcxx5o3hXqH1mNd9/Oi+8iQ==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.3.tgz", + "integrity": "sha512-9mFyI30cuRDImbmFF6O2KUJdgEOsGh9Vmx9x/Dh9tOhL7BngmQPQfwW4aejKm5OHpfWIdmeV6ySyuxoOGjtNng==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-roving-focus": "1.1.2", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-collection": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.2.tgz", + "integrity": "sha512-9z54IEKRxIa9VityapoEYMuByaG42iSy1ZXlY2KcuLSEtq8x4987/N6m15ppoMffgZX72gER2uHe1D9Y6Unlcw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-slot": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-primitive": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.2.tgz", + "integrity": "sha512-Ec/0d38EIuvDF+GZjcMU/Ze6MxntVJYO/fRlCPhCaVUyPY9WTalHJw54tp9sXeJo3tlShWpy41vQRgLRGOuz+w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.2.tgz", + "integrity": "sha512-zgMQWkNO169GtGqRvYrzb0Zf8NhMHS2DuEB/TiEmVnpr5OqPU3i8lfbxaAmC2J/KYuIQxyoQQ6DxepyXp61/xw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-collection": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-primitive": "2.0.2", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.2.tgz", + "integrity": "sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.7.tgz", + "integrity": "sha512-ss0s80BC0+g0+Zc53MvilcnTYSOi4mSuFWBPYPuTOFGjx+pUU+ZrmamMNwS56t8MTFlniA5ocjd4jYm/CdhbOg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.4", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-popper": "1.2.1", + "@radix-ui/react-portal": "1.1.3", + "@radix-ui/react-presence": "1.1.2", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-slot": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.1.tgz", + "integrity": "sha512-SJ31y+Q/zAyShtXJc8x83i9TYdbAfHZ++tUZnvjJJqFjzsdUnKsxPL6IEtBlxKkU7yzer//GQtZSV4GbldL3YA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-arrow": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.1.tgz", + "integrity": "sha512-NaVpZfmv8SKeZbn4ijN2V3jlHA9ngBG16VnIIm22nUR0Yk8KUALyBxT3KYEUnNuch9sTE8UTsS3whzBgKOL30w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.4.tgz", + "integrity": "sha512-XDUI0IVYVSwjMXxM6P4Dfti7AH+Y4oS/TB+sglZ/EXc7cqLwGAmp1NlMrcUjj7ks6R5WTZuWKv44FBbLpwU3sA==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-popper": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.1.tgz", + "integrity": "sha512-3kn5Me69L+jv82EKRuQCXdYyf1DqHwD2U/sxoNgBGCB7K9TRc3bQamQ+5EPM9EvyPdli0W41sROd+ZU1dTCztw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.1", + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-rect": "1.1.0", + "@radix-ui/react-use-size": "1.1.0", + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.3.tgz", + "integrity": "sha512-NciRqhXnGojhT93RPyDaMPfLH3ZSl4jjIFbZQ1b/vxvZEdHsBZ49wP9w8L3HzUQwep01LcWtkUvm0OVB5JAHTw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.1", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-presence": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.2.tgz", + "integrity": "sha512-18TFr80t5EVgL9x1SwF/YGtfG+l0BS0PRAlCWBDoBEiDQjeKgnNZRVJp/oVBl24sr3Gbfwc/Qpj4OcWTQMsAEg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz", + "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-use-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz", + "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/rect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz", + "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.1.tgz", + "integrity": "sha512-vVfA2IZ9q/J+gEamvj761Oq1FpWgCDaNOOIfbPVp2MVPLEomUr5+Vf7kJGwQ24YxZSlQVar7Bes8kyTo5Dshpg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.1.tgz", + "integrity": "sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.1.tgz", + "integrity": "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.1.tgz", + "integrity": "sha512-RApLLOcINYJA+dMVbOju7MYv1Mb2EBp2nH4HdDzXTSyaR5optlm6Otrz1euW3HbdOR8UmmFK06TD+A9frYWv+g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@remix-run/router": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.0.tgz", + "integrity": "sha512-Quz1KOffeEf/zwkCBM3kBtH4ZoZ+pT3xIXBG4PPW/XFtDP7EGhtTiC2+gpL9GnR7+Qdet5Oa6cYSvwKYg6kN9Q==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz", + "integrity": "sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz", + "integrity": "sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz", + "integrity": "sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz", + "integrity": "sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz", + "integrity": "sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz", + "integrity": "sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz", + "integrity": "sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz", + "integrity": "sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz", + "integrity": "sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz", + "integrity": "sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz", + "integrity": "sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz", + "integrity": "sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz", + "integrity": "sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz", + "integrity": "sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz", + "integrity": "sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz", + "integrity": "sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", + "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", + "dev": true, + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@swc/core": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.4.17.tgz", + "integrity": "sha512-tq+mdWvodMBNBBZbwFIMTVGYHe9N7zvEaycVVjfvAx20k1XozHbHhRv+9pEVFJjwRxLdXmtvFZd3QZHRAOpoNQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.2", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.4.17", + "@swc/core-darwin-x64": "1.4.17", + "@swc/core-linux-arm-gnueabihf": "1.4.17", + "@swc/core-linux-arm64-gnu": "1.4.17", + "@swc/core-linux-arm64-musl": "1.4.17", + "@swc/core-linux-x64-gnu": "1.4.17", + "@swc/core-linux-x64-musl": "1.4.17", + "@swc/core-win32-arm64-msvc": "1.4.17", + "@swc/core-win32-ia32-msvc": "1.4.17", + "@swc/core-win32-x64-msvc": "1.4.17" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.4.17.tgz", + "integrity": "sha512-HVl+W4LezoqHBAYg2JCqR+s9ife9yPfgWSj37iIawLWzOmuuJ7jVdIB7Ee2B75bEisSEKyxRlTl6Y1Oq3owBgw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.4.17.tgz", + "integrity": "sha512-WYRO9Fdzq4S/he8zjW5I95G1zcvyd9yyD3Tgi4/ic84P5XDlSMpBDpBLbr/dCPjmSg7aUXxNQqKqGkl6dQxYlA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.4.17.tgz", + "integrity": "sha512-cgbvpWOvtMH0XFjvwppUCR+Y+nf6QPaGu6AQ5hqCP+5Lv2zO5PG0RfasC4zBIjF53xgwEaaWmGP5/361P30X8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.4.17.tgz", + "integrity": "sha512-l7zHgaIY24cF9dyQ/FOWbmZDsEj2a9gRFbmgx2u19e3FzOPuOnaopFj0fRYXXKCmtdx+anD750iBIYnTR+pq/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.4.17.tgz", + "integrity": "sha512-qhH4gr9gAlVk8MBtzXbzTP3BJyqbAfUOATGkyUtohh85fPXQYuzVlbExix3FZXTwFHNidGHY8C+ocscI7uDaYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.4.17.tgz", + "integrity": "sha512-vRDFATL1oN5oZMImkwbgSHEkp8xG1ofEASBypze01W1Tqto8t+yo6gsp69wzCZBlxldsvPpvFZW55Jq0Rn+UnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.4.17.tgz", + "integrity": "sha512-zQNPXAXn3nmPqv54JVEN8k2JMEcMTQ6veVuU0p5O+A7KscJq+AGle/7ZQXzpXSfUCXlLMX4wvd+rwfGhh3J4cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.4.17.tgz", + "integrity": "sha512-z86n7EhOwyzxwm+DLE5NoLkxCTme2lq7QZlDjbQyfCxOt6isWz8rkW5QowTX8w9Rdmk34ncrjSLvnHOeLY17+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.4.17.tgz", + "integrity": "sha512-JBwuSTJIgiJJX6wtr4wmXbfvOswHFj223AumUrK544QV69k60FJ9q2adPW9Csk+a8wm1hLxq4HKa2K334UHJ/g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.4.17", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.4.17.tgz", + "integrity": "sha512-jFkOnGQamtVDBm3MF5Kq1lgW8vx4Rm1UvJWRUfg+0gx7Uc3Jp3QMFeMNw/rDNQYRDYPG3yunCC+2463ycd5+dg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true + }, + "node_modules/@swc/types": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.6.tgz", + "integrity": "sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==", + "dev": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/js-cookie": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-3.0.6.tgz", + "integrity": "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", + "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.12.tgz", + "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.8.0.tgz", + "integrity": "sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/type-utils": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.8.0.tgz", + "integrity": "sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.8.0.tgz", + "integrity": "sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.8.0", + "@typescript-eslint/utils": "7.8.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.8.0.tgz", + "integrity": "sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==", + "dev": true, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.8.0.tgz", + "integrity": "sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/visitor-keys": "7.8.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.8.0.tgz", + "integrity": "sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.15", + "@types/semver": "^7.5.8", + "@typescript-eslint/scope-manager": "7.8.0", + "@typescript-eslint/types": "7.8.0", + "@typescript-eslint/typescript-estree": "7.8.0", + "semver": "^7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.8.0.tgz", + "integrity": "sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.8.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@uiw/react-json-view": { + "version": "2.0.0-alpha.30", + "resolved": "https://registry.npmjs.org/@uiw/react-json-view/-/react-json-view-2.0.0-alpha.30.tgz", + "integrity": "sha512-ufvvirUQcITU9s4R12b7hn/t7ngLCYp1KbBxE+eAD35o3Ey+uxfKvgWmIwGFhV3hFXXxMJ8SHQKwl/ywNCHsDA==", + "license": "MIT", + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.10.0", + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", + "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", + "dev": true, + "dependencies": { + "@swc/core": "^1.3.107" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "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/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-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/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "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/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "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/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/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==", + "devOptional": true + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001702", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", + "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/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/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.0.tgz", + "integrity": "sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==", + "dependencies": { + "@radix-ui/react-dialog": "1.0.5", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-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/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/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/core-js-compat": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", + "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "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/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==", + "license": "MIT" + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/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/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.752", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.752.tgz", + "integrity": "sha512-P3QJreYI/AUTcfBVrC4zy9KvnZWekViThgQMX/VpJ+IsOBbcX5JFpORM4qWapwWQ+agb2nYAOyn/4PMXOk0m2Q==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", + "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-equals": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.2.2.tgz", + "integrity": "sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "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==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/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/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "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==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphql": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz", + "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-request": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-7.1.2.tgz", + "integrity": "sha512-+XE3iuC55C2di5ZUrB4pjgwe+nIQBuXVIK9J98wrVwojzDW3GMdSBZfxUk8l4j9TieIpjpggclxhNEU9ebGF8w==", + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.2.0" + }, + "peerDependencies": { + "graphql": "14 - 16" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "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/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/idb": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", + "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "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-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-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-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-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-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-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/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "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==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "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/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "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==", + "dev": true + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "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/lucide-react": { + "version": "0.376.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.376.0.tgz", + "integrity": "sha512-g91IX3ERD6yUR1TL2dsL4BkcGygpZz/EsqjAeL/kcRQV0EApIOr/9eBfKhYOVyQIcGGuotFGjF3xKLHMEz+b7g==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/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/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/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/multiformats": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", + "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/next-themes": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz", + "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==", + "peerDependencies": { + "react": "^16.8 || ^17 || ^18", + "react-dom": "^16.8 || ^17 || ^18" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "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.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", + "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-day-picker": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz", + "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.0.tgz", + "integrity": "sha512-wPMZ8S2TuPadH0sF5irFGjkNLIcRvOSaEe7v+JER8508dyJumm6XZB1u5kztlX0RVq6AzRVndzqcUh6sFIauzA==", + "dependencies": { + "@remix-run/router": "1.16.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.0.tgz", + "integrity": "sha512-Q9YaSYvubwgbal2c9DJKfx6hTNoBp3iJDsl+Duva/DwxoJH+OTXkxGpql4iUK2sla/8z4RpjAm6EWx1qUDuopQ==", + "dependencies": { + "@remix-run/router": "1.16.0", + "react-router": "6.23.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-smooth": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.4.tgz", + "integrity": "sha512-gnGKTpYwqL0Iii09gHobNolvX4Kiq4PKx6eWBCYYix+8cdw+cGo3do906l1NBPKkSWx1DghC1dlWG9L2uGd61Q==", + "license": "MIT", + "dependencies": { + "fast-equals": "^5.0.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recharts": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.15.1.tgz", + "integrity": "sha512-v8PUTUlyiDe56qUj82w/EDVuzEFXwEHp9/xOowGAZwfLjB9uAy3GllQVIYMWF6nU+qibx85WF75zD7AjqoT54Q==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.21", + "react-is": "^18.3.1", + "react-smooth": "^4.0.4", + "recharts-scale": "^0.4.4", + "tiny-invariant": "^1.3.1", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "license": "MIT", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reselect": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.17.2.tgz", + "integrity": "sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.17.2", + "@rollup/rollup-android-arm64": "4.17.2", + "@rollup/rollup-darwin-arm64": "4.17.2", + "@rollup/rollup-darwin-x64": "4.17.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.17.2", + "@rollup/rollup-linux-arm-musleabihf": "4.17.2", + "@rollup/rollup-linux-arm64-gnu": "4.17.2", + "@rollup/rollup-linux-arm64-musl": "4.17.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.17.2", + "@rollup/rollup-linux-riscv64-gnu": "4.17.2", + "@rollup/rollup-linux-s390x-gnu": "4.17.2", + "@rollup/rollup-linux-x64-gnu": "4.17.2", + "@rollup/rollup-linux-x64-musl": "4.17.2", + "@rollup/rollup-win32-arm64-msvc": "4.17.2", + "@rollup/rollup-win32-ia32-msvc": "4.17.2", + "@rollup/rollup-win32-x64-msvc": "4.17.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.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" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/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/smob": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", + "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", + "dev": true + }, + "node_modules/sonner": { + "version": "1.4.41", + "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.4.41.tgz", + "integrity": "sha512-uG511ggnnsw6gcn/X+YKkWPo5ep9il9wYi3QJxHsYe7yTZ4+cOd1wuodOUmOpFuXL+/RE3R04LczdNCDygTDgQ==", + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "devOptional": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/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==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swr": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz", + "integrity": "sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "use-sync-external-store": "^1.4.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/tailwind-merge": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.0.tgz", + "integrity": "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tempy": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", + "dev": true, + "dependencies": { + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.31.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", + "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "devOptional": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/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==", + "devOptional": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz", + "integrity": "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/victory-vendor": { + "version": "36.9.2", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.9.2.tgz", + "integrity": "sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==", + "license": "MIT AND ISC", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, + "node_modules/vite": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.10.tgz", + "integrity": "sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==", + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-pwa": { + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.19.8.tgz", + "integrity": "sha512-e1oK0dfhzhDhY3VBuML6c0h8Xfx6EkOVYqolj7g+u8eRfdauZe5RLteCIA/c5gH0CBQ0CNFAuv/AFTx4Z7IXTw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "pretty-bytes": "^6.1.1", + "workbox-build": "^7.0.0", + "workbox-window": "^7.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vite-pwa/assets-generator": "^0.2.4", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0", + "workbox-build": "^7.0.0", + "workbox-window": "^7.0.0" + }, + "peerDependenciesMeta": { + "@vite-pwa/assets-generator": { + "optional": true + } + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/workbox-background-sync": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.1.0.tgz", + "integrity": "sha512-rMbgrzueVWDFcEq1610YyDW71z0oAXLfdRHRQcKw4SGihkfOK0JUEvqWHFwA6rJ+6TClnMIn7KQI5PNN1XQXwQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-broadcast-update": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.1.0.tgz", + "integrity": "sha512-O36hIfhjej/c5ar95pO67k1GQw0/bw5tKP7CERNgK+JdxBANQhDmIuOXZTNvwb2IHBx9hj2kxvcDyRIh5nzOgQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-build": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.1.0.tgz", + "integrity": "sha512-F6R94XAxjB2j4ETMkP1EXKfjECOtDmyvt0vz3BzgWJMI68TNSXIVNkgatwUKBlPGOfy9n2F/4voYRNAhEvPJNg==", + "dev": true, + "dependencies": { + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.24.4", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^2.4.1", + "@rollup/plugin-terser": "^0.4.3", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.1.0", + "workbox-broadcast-update": "7.1.0", + "workbox-cacheable-response": "7.1.0", + "workbox-core": "7.1.0", + "workbox-expiration": "7.1.0", + "workbox-google-analytics": "7.1.0", + "workbox-navigation-preload": "7.1.0", + "workbox-precaching": "7.1.0", + "workbox-range-requests": "7.1.0", + "workbox-recipes": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0", + "workbox-streams": "7.1.0", + "workbox-sw": "7.1.0", + "workbox-window": "7.1.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", + "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", + "dev": true, + "dependencies": { + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "ajv": ">=8" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", + "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/workbox-build/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", + "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.4.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/workbox-build/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/workbox-build/node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/workbox-cacheable-response": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.1.0.tgz", + "integrity": "sha512-iwsLBll8Hvua3xCuBB9h92+/e0wdsmSVgR2ZlvcfjepZWwhd3osumQB3x9o7flj+FehtWM2VHbZn8UJeBXXo6Q==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-core": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.1.0.tgz", + "integrity": "sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==", + "dev": true + }, + "node_modules/workbox-expiration": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.1.0.tgz", + "integrity": "sha512-m5DcMY+A63rJlPTbbBNtpJ20i3enkyOtSgYfv/l8h+D6YbbNiA0zKEkCUaMsdDlxggla1oOfRkyqTvl5Ni5KQQ==", + "dev": true, + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-google-analytics": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.1.0.tgz", + "integrity": "sha512-FvE53kBQHfVTcZyczeBVRexhh7JTkyQ8HAvbVY6mXd2n2A7Oyz/9fIwnY406ZcDhvE4NFfKGjW56N4gBiqkrew==", + "dev": true, + "dependencies": { + "workbox-background-sync": "7.1.0", + "workbox-core": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0" + } + }, + "node_modules/workbox-navigation-preload": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.1.0.tgz", + "integrity": "sha512-4wyAbo0vNI/X0uWNJhCMKxnPanNyhybsReMGN9QUpaePLTiDpKxPqFxl4oUmBNddPwIXug01eTSLVIFXimRG/A==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-precaching": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.1.0.tgz", + "integrity": "sha512-LyxzQts+UEpgtmfnolo0hHdNjoB7EoRWcF7EDslt+lQGd0lW4iTvvSe3v5JiIckQSB5KTW5xiCqjFviRKPj1zA==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0" + } + }, + "node_modules/workbox-range-requests": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.1.0.tgz", + "integrity": "sha512-m7+O4EHolNs5yb/79CrnwPR/g/PRzMFYEdo01LqwixVnc/sbzNSvKz0d04OE3aMRel1CwAAZQheRsqGDwATgPQ==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-recipes": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.1.0.tgz", + "integrity": "sha512-NRrk4ycFN9BHXJB6WrKiRX3W3w75YNrNrzSX9cEZgFB5ubeGoO8s/SDmOYVrFYp9HMw6sh1Pm3eAY/1gVS8YLg==", + "dev": true, + "dependencies": { + "workbox-cacheable-response": "7.1.0", + "workbox-core": "7.1.0", + "workbox-expiration": "7.1.0", + "workbox-precaching": "7.1.0", + "workbox-routing": "7.1.0", + "workbox-strategies": "7.1.0" + } + }, + "node_modules/workbox-routing": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.1.0.tgz", + "integrity": "sha512-oOYk+kLriUY2QyHkIilxUlVcFqwduLJB7oRZIENbqPGeBP/3TWHYNNdmGNhz1dvKuw7aqvJ7CQxn27/jprlTdg==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-strategies": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.1.0.tgz", + "integrity": "sha512-/UracPiGhUNehGjRm/tLUQ+9PtWmCbRufWtV0tNrALuf+HZ4F7cmObSEK+E4/Bx1p8Syx2tM+pkIrvtyetdlew==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0" + } + }, + "node_modules/workbox-streams": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.1.0.tgz", + "integrity": "sha512-WyHAVxRXBMfysM8ORwiZnI98wvGWTVAq/lOyBjf00pXFvG0mNaVz4Ji+u+fKa/mf1i2SnTfikoYKto4ihHeS6w==", + "dev": true, + "dependencies": { + "workbox-core": "7.1.0", + "workbox-routing": "7.1.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.1.0.tgz", + "integrity": "sha512-Hml/9+/njUXBglv3dtZ9WBKHI235AQJyLBV1G7EFmh4/mUdSQuXui80RtjDeVRrXnm/6QWgRUEHG3/YBVbxtsA==", + "dev": true + }, + "node_modules/workbox-window": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.1.0.tgz", + "integrity": "sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==", + "dev": true, + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.1.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/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/yaml": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.2.tgz", + "integrity": "sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/subgraph-client/package.json b/subgraph-client/package.json new file mode 100644 index 0000000..b8581ab --- /dev/null +++ b/subgraph-client/package.json @@ -0,0 +1,67 @@ +{ + "name": "pdpexplorer", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --host", + "build": "tsc && vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@mui/material": "^6.4.4", + "@mui/x-data-grid": "^7.26.0", + "@radix-ui/react-accordion": "^1.2.3", + "@radix-ui/react-collapsible": "^1.1.3", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-select": "^2.1.6", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-tooltip": "^1.1.7", + "@types/js-cookie": "^3.0.6", + "@uiw/react-json-view": "^2.0.0-alpha.30", + "@vitejs/plugin-react": "^4.2.1", + "axios": "^1.6.8", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "cmdk": "^1.0.0", + "dotenv": "^16.4.5", + "graphql-request": "^7.1.2", + "js-cookie": "^3.0.5", + "lucide-react": "^0.376.0", + "mini-svg-data-uri": "^1.4.4", + "multiformats": "^13.3.2", + "next-themes": "^0.3.0", + "react": "^18.2.0", + "react-day-picker": "^8.10.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.1", + "recharts": "^2.15.1", + "sonner": "^1.4.3", + "swr": "^2.3.3", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@types/node": "^20.11.20", + "@types/react": "^18.2.56", + "@types/react-dom": "^18.2.19", + "@typescript-eslint/eslint-plugin": "^7.0.2", + "@typescript-eslint/parser": "^7.0.2", + "@vitejs/plugin-react-swc": "^3.5.0", + "autoprefixer": "^10.4.17", + "eslint": "^8.56.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", + "typescript": "^5.2.2", + "vite": "^5.2.8", + "vite-plugin-pwa": "^0.19.1" + } +} diff --git a/subgraph-client/postcss.config.js b/subgraph-client/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/subgraph-client/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/subgraph-client/prettier.config.js b/subgraph-client/prettier.config.js new file mode 100644 index 0000000..c72df58 --- /dev/null +++ b/subgraph-client/prettier.config.js @@ -0,0 +1,33 @@ +/** @type {import('prettier').Config} */ +module.exports = { + endOfLine: "lf", + semi: false, + singleQuote: false, + tabWidth: 2, + trailingComma: "es5", + importOrder: [ + "^(react/(.*)$)|^(react$)", + "^(next/(.*)$)|^(next$)", + "", + "", + "^types$", + "^@/env(.*)$", + "^@/types/(.*)$", + "^@/config/(.*)$", + "^@/lib/(.*)$", + "^@/hooks/(.*)$", + "^@/components/ui/(.*)$", + "^@/components/(.*)$", + "^@/styles/(.*)$", + "^@/app/(.*)$", + "", + "^[./]", + ], + importOrderSeparation: false, + importOrderSortSpecifiers: true, + importOrderBuiltinModulesToTop: true, + importOrderParserPlugins: ["typescript", "jsx", "decorators-legacy"], + importOrderMergeDuplicateImports: true, + importOrderCombineTypeAndValueImports: true, + plugins: ["@ianvs/prettier-plugin-sort-imports"], +} diff --git a/subgraph-client/public/fonts/GeistVariableVF.woff2 b/subgraph-client/public/fonts/GeistVariableVF.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..328a020bb563ac494e5ba10ecc29b5eb8c85226b GIT binary patch literal 53444 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 NOYW^eH+3!m006N9us8q! literal 0 HcmV?d00001 diff --git a/subgraph-client/public/robots.txt b/subgraph-client/public/robots.txt new file mode 100644 index 0000000..14267e9 --- /dev/null +++ b/subgraph-client/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Allow: / \ No newline at end of file diff --git a/subgraph-client/public/site.webmanifest b/subgraph-client/public/site.webmanifest new file mode 100644 index 0000000..45dc8a2 --- /dev/null +++ b/subgraph-client/public/site.webmanifest @@ -0,0 +1 @@ +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file diff --git a/subgraph-client/src/App.tsx b/subgraph-client/src/App.tsx new file mode 100644 index 0000000..277e3d4 --- /dev/null +++ b/subgraph-client/src/App.tsx @@ -0,0 +1,14 @@ +import { BrowserRouter as Router } from 'react-router-dom' +import AppRoutes from '@/router/routes' +import { Toaster } from '@/components/ui/sonner' + +function App() { + return ( + + + + + ) +} + +export default App diff --git a/subgraph-client/src/api/apiService.ts b/subgraph-client/src/api/apiService.ts new file mode 100644 index 0000000..1440558 --- /dev/null +++ b/subgraph-client/src/api/apiService.ts @@ -0,0 +1,67 @@ +import { fetcher } from '@/utility/fetcher' +import { providerQuery, landingProofSetsQuery } from '@/utility/queries' +import type { Provider, ProofSet } from '@/utility/types' +import { normalizeBytesFilter } from '@/utility/helper' + +export interface SearchResult { + type: 'provider' | 'proofset' + id: string + provider_id?: string + active_sets?: number + data_size: string +} + +// Regex to validate hex strings (optional 0x prefix) +const hexRegex = /^(0x)?[0-9a-fA-F]+$/ + +export const search = async (query: string): Promise => { + const trimmedQuery = query.trim() + + if (!hexRegex.test(trimmedQuery)) { + console.log('Search query is not a valid hex string:', trimmedQuery) + return [] + } + + try { + const providers = await fetcher<{ providers: Provider[] }>([ + providerQuery, + { where: { address_contains: normalizeBytesFilter(trimmedQuery) } }, + ]) + const proofSets = isNaN(Number(trimmedQuery)) + ? { proofSets: [] } + : await fetcher<{ proofSets: ProofSet[] }>([ + landingProofSetsQuery, + { where: { setId: trimmedQuery } }, + ]) + + const searchResults: SearchResult[] = [] + + if (providers?.providers?.length > 0) { + searchResults.push( + ...providers.providers.map((provider) => ({ + type: 'provider' as const, + id: provider.address, + provider_id: provider.address, + active_sets: Number(provider.totalProofSets), + data_size: provider.totalDataSize, + })) + ) + } + + if (proofSets?.proofSets?.length > 0) { + searchResults.push( + ...proofSets.proofSets.map((proofSet) => ({ + type: 'proofset' as const, + id: proofSet.setId, + provider_id: proofSet.owner.address, + data_size: proofSet.totalDataSize, + })) + ) + } + + return searchResults + } catch (err) { + console.error('Search failed:', err) + return [] + } +} diff --git a/subgraph-client/src/components/Landing/NetworkStatsCard.tsx b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx new file mode 100644 index 0000000..b121ee3 --- /dev/null +++ b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx @@ -0,0 +1,109 @@ +import React from 'react' +import { NetworkMetrics } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDataSize, formatTokenAmount } from '@/utility/helper' + +interface NetworkStatsCardProps { + metrics?: NetworkMetrics | null + isLoading: boolean + error: any +} + +export const NetworkStatsCard: React.FC = ({ + metrics, + isLoading, + error, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Network Metrics + + Could not load network statistics. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (!metrics) { + return ( + + No Data + + Network metrics are currently unavailable. + + + ) + } + + return ( +
+ + + + + + + + +
+ ) +} + +// Reusable Metric Item +const MetricItem: React.FC<{ title: string; value: React.ReactNode }> = ({ + title, + value, +}) => ( +
+

{title}

+

{value ?? 'N/A'}

+
+) + +// Skeleton for the stats card +const NetworkStatsSkeleton: React.FC = () => ( +
+ {[...Array(8)].map((_, i) => ( +
+ + +
+ ))} +
+) diff --git a/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx b/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx new file mode 100644 index 0000000..cb829df --- /dev/null +++ b/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx @@ -0,0 +1,135 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { ProofSet } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDataSize, formatDate } from '@/utility/helper' + +interface RecentProofSetsTableProps { + proofSets?: ProofSet[] + isLoading: boolean + error: any + itemsToShow?: number +} + +export const RecentProofSetsTable: React.FC = ({ + proofSets, + isLoading, + error, + itemsToShow = 10, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Recent Proof Sets + + Could not load recent proof sets. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (!proofSets || proofSets.length === 0) { + return ( +
+ No recent proof sets found. +
+ ) + } + + return ( +
+ + + + + + + + + + + + {proofSets.map((proofSet) => ( + + + + + + + + ))} + +
Proof Set IDOwnerStatusData SizeCreated At
+ + {proofSet.setId} + + + + {`${proofSet.owner.address.substring( + 0, + 8 + )}...${proofSet.owner.address.substring( + proofSet.owner.address.length - 6 + )}`} + + + + {proofSet.isActive ? 'Active' : 'Inactive'} + + {formatDataSize(proofSet.totalDataSize)}{formatDate(proofSet.createdAt, true)}
+
+ ) +} + +const RecentProofSetsSkeleton: React.FC<{ itemsPerPage: number }> = ({ + itemsPerPage, +}) => ( +
+ + + + {[...Array(5)].map((_, i) => ( + + ))} + + + + {[...Array(itemsPerPage)].map((_, i) => ( + + {[...Array(5)].map((_, j) => ( + + ))} + + ))} + +
+ +
+ +
+
+) diff --git a/subgraph-client/src/components/Landing/RecentProvidersTable.tsx b/subgraph-client/src/components/Landing/RecentProvidersTable.tsx new file mode 100644 index 0000000..09ffa1b --- /dev/null +++ b/subgraph-client/src/components/Landing/RecentProvidersTable.tsx @@ -0,0 +1,110 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { Provider } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDate, formatDataSize } from '@/utility/helper' + +interface RecentProvidersTableProps { + providers?: Provider[] + isLoading: boolean + error: any + itemsToShow?: number +} + +export const RecentProvidersTable: React.FC = ({ + providers, + isLoading, + error, + itemsToShow = 10, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Recent Providers + + Could not load recent providers. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (!providers || providers.length === 0) { + return ( +
+ No recent providers found. +
+ ) + } + + return ( +
+ + + + + + + + + + + + {providers.map((provider) => ( + + + + + + + + ))} + +
Provider IDProof SetsRootsData SizeJoined Date
+ + {provider.address} + + {provider.totalProofSets}{provider.totalRoots}{formatDataSize(provider.totalDataSize)}{formatDate(provider.createdAt, true)}
+
+ ) +} + +const RecentProvidersSkeleton: React.FC<{ itemsPerPage: number }> = ({ + itemsPerPage, +}) => ( +
+ + + + {[...Array(5)].map((_, i) => ( + + ))} + + + + {[...Array(itemsPerPage)].map((_, i) => ( + + {[...Array(5)].map((_, j) => ( + + ))} + + ))} + +
+ +
+ +
+
+) diff --git a/subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx b/subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx new file mode 100644 index 0000000..d120c84 --- /dev/null +++ b/subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx @@ -0,0 +1,290 @@ +import React, { useState } from 'react' +import { Transaction, EventLog } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { Pagination } from '@/components/ui/pagination' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' +import { AlertTriangle } from 'lucide-react' +import { formatDate, formatTokenAmount } from '@/utility/helper' +import { trackedMethods, trackedEvents, explorerUrl } from '@/utility/constants' +import JsonDisplay from '@/components/ProofSetDetails/JsonDisplay' + +interface ActivityTabsProps { + transactions: Transaction[] + eventLogs: EventLog[] + totalTransactions: string | number + totalEventLogs: string | number + isLoadingTransactions: boolean + errorTransactions: any + isLoadingEventLogs: boolean + errorEventLogs: any + methodFilter: string + onMethodFilterChange: (filter: string) => void + eventFilter: string + onEventFilterChange: (filter: string) => void + currentPage: number + onPageChange: (page: number) => void + itemsPerPage: number +} + +export const ActivityTabs: React.FC = ({ + transactions, + eventLogs, + totalTransactions, + totalEventLogs, + isLoadingTransactions, + errorTransactions, + isLoadingEventLogs, + errorEventLogs, + methodFilter, + onMethodFilterChange, + eventFilter, + onEventFilterChange, + currentPage, + onPageChange, + itemsPerPage, +}) => { + const [activeTab, setActiveTab] = useState<'transactions' | 'eventLogs'>( + 'transactions' + ) + + const renderPagination = (total: number | string) => { + total = Number(total) + if (total <= itemsPerPage) return null + return ( +
+ +
+ ) + } + + return ( +
+ setActiveTab(value as any)} + > + + + Transactions ({Number(totalTransactions).toLocaleString()}) + + + Event Logs ({Number(totalEventLogs).toLocaleString()}) + + + + {/* Transactions Tab */} + +
+ +
+ + {isLoadingTransactions ? ( + + ) : errorTransactions ? ( + + + Error Loading Transactions + + Could not load transactions. Error:{' '} + {errorTransactions.message || 'Unknown error'} + + + ) : ( +
+ {transactions.length === 0 ? ( +
+ No transactions found + {methodFilter !== 'All Methods' + ? ` for method '${methodFilter}'` + : ''} + . +
+ ) : ( + + + + + + + + + + + + {transactions.map((tx) => ( + + + + + + + + ))} + +
HashHeightMethodValue (FIL)Time
+ + {`${tx.hash.substring(0, 8)}...${tx.hash.substring( + tx.hash.length - 8 + )}`} + + + {Number(tx.height).toLocaleString()} + {tx.method}{formatTokenAmount(tx.value)}{formatDate(tx.createdAt)}
+ )} +
+ )} + {renderPagination(totalTransactions)} +
+ + {/* Event Logs Tab */} + +
+ +
+ + {isLoadingEventLogs ? ( + + ) : errorEventLogs ? ( + + + Error Loading Event Logs + + Could not load event logs. Error:{' '} + {errorEventLogs.message || 'Unknown error'} + + + ) : ( +
+ {eventLogs.length === 0 ? ( +
+ No event logs found + {eventFilter !== 'All Events' + ? ` for event '${eventFilter}'` + : ''} + . +
+ ) : ( + + + + + + + + + + + {eventLogs.map((log) => ( + + + + + + + ))} + +
NameTx HashTimeData
{log.name} + + {`${log.transactionHash.substring( + 0, + 8 + )}...${log.transactionHash.substring( + log.transactionHash.length - 8 + )}`} + + {formatDate(log.createdAt)} + +
+ )} +
+ )} + {renderPagination(totalEventLogs)} +
+
+
+ ) +} + +const ActivityTableSkeleton: React.FC<{ + itemsPerPage: number + columns: number +}> = ({ itemsPerPage, columns }) => ( +
+ + + + {[...Array(columns)].map((_, i) => ( + + ))} + + + + {[...Array(itemsPerPage)].map((_, i) => ( + + {[...Array(columns)].map((_, j) => ( + + ))} + + ))} + +
+ +
+ +
+
+) diff --git a/subgraph-client/src/components/ProofSetDetails/HeatmapSection.tsx b/subgraph-client/src/components/ProofSetDetails/HeatmapSection.tsx new file mode 100644 index 0000000..514ddae --- /dev/null +++ b/subgraph-client/src/components/ProofSetDetails/HeatmapSection.tsx @@ -0,0 +1,110 @@ +import React from 'react' +import { Root } from '@/utility/types' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle, ChevronDown, ChevronUp } from 'lucide-react' +import { Button } from '@/components/ui/button' +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from '@/components/ui/collapsible' +import ProofHeatmap from '@/components/ProofSetDetails/ProofHeatmap' + +interface HeatmapSectionProps { + heatmapRoots: Root[] + totalRoots: number + isLoading: boolean + error: any + isHeatmapExpanded: boolean + setIsHeatmapExpanded: (expanded: boolean) => void +} + +export const HeatmapSection: React.FC = ({ + heatmapRoots, + totalRoots, + isLoading, + error, + isHeatmapExpanded, + setIsHeatmapExpanded, +}) => { + return ( + +
+
+

+ Historical Proving Heat Map + {!isLoading && !error && ( + + ({heatmapRoots.length} of {totalRoots} roots shown) + + )} +

+ + + +
+ + {/* Legend */} +
+
+
+ Not proven yet +
+
+
+ Proven +
+
+
+ Faulted proof +
+
+ + {/* Heatmap Display */} + {isLoading ? ( + + ) : error ? ( + + + Error Loading Heatmap + + Could not load heatmap data. Error:{' '} + {error.message || 'Unknown error'} + + + ) : ( + + )} + + {/* Collapsible content for 'show all' message */} + + {!isLoading && + heatmapRoots.length < totalRoots && + isHeatmapExpanded && ( +
+ Showing all {totalRoots} roots from the last 7 days. +
+ )} + {!isLoading && heatmapRoots.length === 0 && !error && ( +
+ No root data available for the heatmap. +
+ )} +
+
+
+ ) +} + +const HeatmapSkeleton: React.FC = () => ( +
+
+
+) diff --git a/subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx b/subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx new file mode 100644 index 0000000..e4a3446 --- /dev/null +++ b/subgraph-client/src/components/ProofSetDetails/JsonDisplay.tsx @@ -0,0 +1,17 @@ +import JsonView from '@uiw/react-json-view' +import { githubLightTheme } from '@uiw/react-json-view/githubLight' +import { githubDarkTheme } from '@uiw/react-json-view/githubDark' +import { useTheme } from '@/components/shared/ThemeProvider' + +const JsonDisplay = ({ jsonData }) => { + const { theme } = useTheme() + return ( + + ) +} + +export default JsonDisplay diff --git a/subgraph-client/src/components/ProofSetDetails/ProofHeatmap.tsx b/subgraph-client/src/components/ProofSetDetails/ProofHeatmap.tsx new file mode 100644 index 0000000..81356bf --- /dev/null +++ b/subgraph-client/src/components/ProofSetDetails/ProofHeatmap.tsx @@ -0,0 +1,115 @@ +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from '@/components/ui/tooltip' +import { type Root } from '@/utility/types' +import { formatDate, hexToBytes } from '@/utility/helper' +import { useMemo } from 'react' +import { CID } from 'multiformats/cid' + +const ProofHeatmap = ({ roots }: { roots: Root[] }) => { + const calculateRootHealthScore = (root: Root) => { + const totalProofs = Number(root.totalProofsSubmitted) || 0 + const totalFaults = Number(root.totalPeriodsFaulted) || 0 + + if (totalProofs === 0 && totalFaults === 0) { + return { status: 'unchallenged', score: 0 } + } + + if (totalProofs === 0 && totalFaults > 0) { + return { status: 'fault', score: 0 } + } + + if (totalProofs > 0 && totalFaults === 0) { + return { status: 'success', score: 1 } + } + + const score = totalProofs / (totalProofs + totalFaults) + + let status = 'mixed' + if (score >= 0.8) status = 'success' + else if (score <= 0.2) status = 'fault' + + return { status, score } + } + + const activeRoots = roots.filter((root) => !root.removed) + + const getColorFromScore = useMemo(() => { + return (score: number, status: string) => { + if (status === 'unchallenged') return 'rgb(255, 255, 255)' + + const r = score <= 0.2 ? 255 : Math.round(255 * (1 - (score - 0.5) * 2)) + const g = score <= 0.8 ? Math.round(255 * score * 2) : 255 + + return `rgb(${r}, ${g}, 0)` + } + }, []) + + return ( + +
+ {activeRoots.map((root) => { + const { status, score } = calculateRootHealthScore(root) + const healthPercentage = Math.round(score * 100) + + return ( + + +
+ + +
+

Root ID: {root.rootId}

+

+ CID: {CID.decode(hexToBytes(root.cid)).toString()} +

+

+ Total Proofs: {root.totalProofsSubmitted} +

+

+ Total Faulted Periods: {root.totalPeriodsFaulted} +

+ {status !== 'unchallenged' && ( +

+ Health Score: {healthPercentage}% +

+ )} +

+ Last Proven:{' '} + {root.lastProvenAt !== '0' + ? formatDate(root.lastProvenAt) + : 'Never'} +

+

+ Last Faulted:{' '} + {root.lastFaultedAt !== '0' + ? formatDate(root.lastFaultedAt) + : 'Never'} +

+
+
+ + ) + })} + {activeRoots.length === 0 && ( +
+ No active roots found. +
+ )} +
+ + ) +} + +export default ProofHeatmap diff --git a/subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx b/subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx new file mode 100644 index 0000000..ec1f3e0 --- /dev/null +++ b/subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx @@ -0,0 +1,204 @@ +import React, { useState, useMemo } from 'react' +import { WeeklyProofSetActivity } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' +import { LineChart, Line, CartesianGrid, XAxis, YAxis, Tooltip } from 'recharts' +import { ChartContainer, ChartTooltipContent } from '@/components/ui/chart' +import { hexToBytes, decodeWeekIdAndProofSetId } from '@/utility/helper' + +interface ProofSetActivityChartProps { + activities: WeeklyProofSetActivity[] + isLoading: boolean + error: any +} + +const getLabelAndColor = (activityType: string) => { + switch (activityType) { + case 'totalProofs': + return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } + case 'totalFaultedRoots': + return { label: 'Faulted Roots', color: 'hsl(var(--chart-2))' } + case 'totalRootsProved': + return { label: 'Roots Proved', color: 'hsl(var(--chart-3))' } + case 'totalRootsAdded': + return { label: 'Roots Added', color: 'hsl(var(--chart-5))' } + default: + return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } + } +} + +export const ProofSetActivityChart: React.FC = ({ + activities, + isLoading, + error, +}) => { + const [activityType, setActivityType] = useState< + 'totalProofs' | 'totalFaultedRoots' | 'totalRootsProved' | 'totalRootsAdded' + >('totalProofs') + + const chartData = useMemo(() => { + // Sort and potentially transform data if needed (e.g., calculate date from week ID) + return [...activities] + .sort( + (a, b) => + decodeWeekIdAndProofSetId(hexToBytes(a.id)).weekId - + decodeWeekIdAndProofSetId(hexToBytes(b.id)).weekId + ) + .map((act) => { + const { weekId } = decodeWeekIdAndProofSetId(hexToBytes(act.id)) + const date = new Date(weekId * 604800 * 1000) // Convert weekId to timestamp + return { + totalProofs: Number(act.totalProofs), + totalFaultedRoots: Number(act.totalFaultedRoots), + totalRootsProved: Number(act.totalRootsProved), + totalRootsAdded: Number(act.totalRootsAdded), + date: date, + dateLabel: date.toLocaleDateString('en-US', { + month: 'short', + day: 'numeric', + }), + } + }) + }, [activities]) + + const dataKey = activityType + const { label: yAxisLabel, color: lineColor } = getLabelAndColor(activityType) + + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Activity + + Could not load proof set activity data. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + return ( +
+
+

Weekly Proof Set Activity

+ +
+ + {activities.length === 0 ? ( +
+ No activity data available for the selected period. +
+ ) : ( + + + + + + + chartData + .find((d) => d.dateLabel === value) + ?.date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric', + }) || value + } + formatter={(value, name) => [ + `${Number(value).toLocaleString()} ${ + getLabelAndColor(name.toString()).label + }`, + null, + ]} + /> + } + /> + + + + )} +
+ ) +} + +const ActivityChartSkeleton: React.FC = () => ( +
+
+ + +
+ +
+) diff --git a/subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx b/subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx new file mode 100644 index 0000000..2dcacfd --- /dev/null +++ b/subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx @@ -0,0 +1,130 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { ProofSet } from '@/utility/types' +import { formatDataSize, formatTokenAmount, formatDate } from '@/utility/helper' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' + +interface ProofSetOverviewProps { + proofSet?: ProofSet + isLoading: boolean + error: any +} + +export const ProofSetOverview: React.FC = ({ + proofSet, + isLoading, + error, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Overview + + Could not load proof set details. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (!proofSet) { + return ( + + No Data + + Proof set details could not be found. + + + ) + } + + return ( +
+

Overview

+
+
+ Owner: + + {proofSet.owner.address} + +
+
+ Listener Address: + {proofSet.listener} +
+
+ Status: + {proofSet.isActive ? 'Active' : 'Inactive'} +
+
+ Total Roots: + {proofSet.totalRoots || 0} +
+
+ Total Roots Proved: + {proofSet.totalProvedRoots || 0} +
+
+ Data Size: + {formatDataSize(proofSet.totalDataSize)} +
+
+ Total Fee Paid: + {formatTokenAmount(proofSet.totalFeePaid)} +
+
+ Faulted Periods: + {proofSet.totalFaultedPeriods} +
+
+ Last Proven: + + {proofSet.lastProvenEpoch !== '0' + ? Number(proofSet.lastProvenEpoch).toLocaleString() + : 'Never'} + +
+
+ Next Challenge: + + {proofSet.nextChallengeEpoch !== '0' + ? Number(proofSet.nextChallengeEpoch).toLocaleString() + : 'N/A'} + +
+
+ Challenge Range: + {proofSet.challengeRange || 'N/A'} +
+
+ Created At: + {formatDate(proofSet.createdAt)} +
+
+
+ ) +} + +const ProofSetOverviewSkeleton: React.FC = () => ( +
+ +
+ {[...Array(12)].map((_, i) => ( +
+ + +
+ ))} +
+
+) diff --git a/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx new file mode 100644 index 0000000..9c6b25a --- /dev/null +++ b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx @@ -0,0 +1,190 @@ +import React from 'react' +import { Root } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { Pagination } from '@/components/ui/pagination' +import { AlertTriangle } from 'lucide-react' +import { formatDate, formatDataSize, hexToBytes } from '@/utility/helper' +import { explorerUrl } from '@/utility/constants' +import { CID } from 'multiformats/cid' + +interface RootsTableProps { + roots: Root[] + totalRoots: number + isLoading: boolean + error: any + currentPage: number + onPageChange: (page: number) => void + itemsPerPage: number +} + +export const RootsTable: React.FC = ({ + roots, + totalRoots, + isLoading, + error, + currentPage, + onPageChange, + itemsPerPage, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Roots + + Could not load roots data. Error: {error.message || 'Unknown error'} + + + ) + } + + const renderPagination = () => { + if (totalRoots <= itemsPerPage) return null + return ( +
+ +
+ ) + } + + return ( +
+

Roots

+
+ {roots.length === 0 ? ( +
+ No roots found for this proof set. +
+ ) : ( + + + + + + + + + + + + + + + {roots.map((root) => { + const cidStr = root.cid + ? CID.decode(hexToBytes(root.cid)).toString() + : 'N/A' + return ( + + + + + + + + + + + ) + })} + +
idRoot CIDSizeStatusProofsFaultsLast ProvenLast Faulted
{root.rootId} + {cidStr !== 'N/A' ? ( + + {`${cidStr.substring(0, 8)}...${cidStr.substring( + cidStr.length - 8 + )}`} + + ) : ( + 'N/A' + )} + {formatDataSize(root.rawSize)} + + {root.removed ? 'Removed' : 'Active'} + + {root.totalProofsSubmitted || 0} + 0 + ? 'text-red-600 font-medium dark:text-red-400' + : 'dark:text-gray-300' + }`} + > + {root.totalPeriodsFaulted || 0} + + + {root.lastProvenAt !== '0' + ? formatDate(root.lastProvenAt) + : 'Never'} + + {root.lastFaultedAt !== '0' + ? formatDate(root.lastFaultedAt) + : 'Never'} +
+ )} +
+ {renderPagination()} +
+ ) +} + +const RootsTableSkeleton: React.FC<{ itemsPerPage: number }> = ({ + itemsPerPage, +}) => ( +
+ +
+ + + + {[...Array(8)].map((_, i) => ( + + ))} + + + + {[...Array(itemsPerPage)].map((_, i) => ( + + {[...Array(8)].map((_, j) => ( + + ))} + + ))} + +
+ +
+ +
+
+
+
+ +
+
+
+) diff --git a/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx b/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx new file mode 100644 index 0000000..cb28eca --- /dev/null +++ b/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx @@ -0,0 +1,146 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { ProofSet } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDataSize } from '@/utility/helper' + +interface ProofSetsTableProps { + proofSets: ProofSet[] + isLoading: boolean + error: any + searchQuery: string +} + +export const ProofSetsTable: React.FC = ({ + proofSets, + isLoading, + error, + searchQuery, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Proof Sets + + Could not load proof sets list. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (proofSets.length === 0) { + return ( +
+ No proof sets found{searchQuery ? ` matching "${searchQuery}"` : ''}. +
+ ) + } + + return ( +
+ + + + + + + + + + + + + + + {proofSets.map((proofSet) => ( + + + + + + + + + + + ))} + +
Proof Set IDOwnerStatusTotal RootsProved RootsData SizeLast Proof EpochNext Challenge
+ + {proofSet.setId} + + + + {`${proofSet.owner.address.substring( + 0, + 10 + )}...${proofSet.owner.address.substring( + proofSet.owner.address.length - 8 + )}`} + + + + {proofSet.isActive ? 'Active' : 'Inactive'} + + {proofSet.totalRoots}{proofSet.totalProvedRoots}{formatDataSize(proofSet.totalDataSize)} + {proofSet.lastProvenEpoch + ? Number(proofSet.lastProvenEpoch).toLocaleString() + : 'Never'} + + {proofSet.nextChallengeEpoch + ? Number(proofSet.nextChallengeEpoch).toLocaleString() + : 'N/A'} +
+
+ ) +} + +const ProofSetsTableSkeleton: React.FC<{ itemsPerPage: number }> = ({ + itemsPerPage, +}) => ( +
+ + + + {[...Array(8)].map((_, i) => ( + + ))} + + + + {[...Array(itemsPerPage)].map((_, i) => ( + + {[...Array(8)].map((_, j) => ( + + ))} + + ))} + +
+ +
+ +
+
+) diff --git a/subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx b/subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx new file mode 100644 index 0000000..1ca9ce4 --- /dev/null +++ b/subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx @@ -0,0 +1,203 @@ +import React, { useState, useMemo } from 'react' +import { WeeklyProviderActivity } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select' +import { LineChart, Line, CartesianGrid, XAxis, YAxis, Tooltip } from 'recharts' +import { ChartContainer, ChartTooltipContent } from '@/components/ui/chart' +import { hexToBytes, decodeWeekIdAndProviderId } from '@/utility/helper' + +const getLabelAndColor = (activityType: string) => { + switch (activityType) { + case 'totalProofs': + return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } + case 'totalFaultedRoots': + return { label: 'Faulted Roots', color: 'hsl(var(--chart-2))' } + case 'totalRootsProved': + return { label: 'Roots Proved', color: 'hsl(var(--chart-3))' } + case 'totalRootsAdded': + return { label: 'Roots Added', color: 'hsl(var(--chart-5))' } + default: + return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } + } +} + +interface ProviderActivityChartProps { + activities: WeeklyProviderActivity[] + isLoading: boolean + error: any +} + +export const ProviderActivityChart: React.FC = ({ + activities, + isLoading, + error, +}) => { + const [activityType, setActivityType] = useState< + 'totalProofs' | 'totalFaultedRoots' | 'totalRootsProved' | 'totalRootsAdded' + >('totalProofs') + + const chartData = useMemo(() => { + return [...activities] + .sort( + (a, b) => + decodeWeekIdAndProviderId(hexToBytes(a.id)).weekId - + decodeWeekIdAndProviderId(hexToBytes(b.id)).weekId + ) + .map((act) => { + const { weekId } = decodeWeekIdAndProviderId(hexToBytes(act.id)) + const date = new Date(weekId * 604800 * 1000) + return { + totalProofs: Number(act.totalProofs), + totalFaultedRoots: Number(act.totalFaultedRoots), + totalRootsProved: Number(act.totalRootsProved), + totalRootsAdded: Number(act.totalRootsAdded), + date: date, + dateLabel: date.toLocaleDateString('en-US', { + month: 'short', + day: 'numeric', + }), + } + }) + }, [activities]) + + const dataKey = activityType + const { label: yAxisLabel, color: lineColor } = getLabelAndColor(activityType) + + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Activity + + Could not load provider activity data. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + return ( +
+
+

Weekly Provider Activity

+ +
+ + {activities.length === 0 ? ( +
+ No activity data available for the selected period. +
+ ) : ( + + + + + + + chartData + .find((d) => d.dateLabel === value) + ?.date.toLocaleDateString('en-US', { + year: 'numeric', + month: 'short', + day: 'numeric', + }) || value + } + formatter={(value, name) => [ + `${Number(value).toLocaleString()} ${ + name === 'totalProofs' ? 'Proofs' : 'Faults' + }`, + null, + ]} + /> + } + /> + + + + )} +
+ ) +} + +const ActivityChartSkeleton: React.FC = () => ( +
+
+ + +
+ +
+) diff --git a/subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx b/subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx new file mode 100644 index 0000000..25db12b --- /dev/null +++ b/subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx @@ -0,0 +1,94 @@ +import React from 'react' +import { Provider } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDate, formatDataSize } from '@/utility/helper' + +interface ProviderOverviewCardProps { + provider?: Provider + isLoading: boolean + error: any +} + +export const ProviderOverviewCard: React.FC = ({ + provider, + isLoading, + error, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Overview + + Could not load provider details. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (!provider) { + return ( + + No Data + + Provider details could not be found. + + + ) + } + + return ( +
+

Overview

+
+ + + + + + +
+
+ ) +} + +// Simple helper for grid items +const InfoItem: React.FC<{ title: string; value: React.ReactNode }> = ({ + title, + value, +}) => ( +
+ {title}: + {value ?? 'N/A'} +
+) + +const ProviderOverviewSkeleton: React.FC = () => ( +
+ +
+ {[...Array(6)].map((_, i) => ( +
+ + +
+ ))} +
+
+) diff --git a/subgraph-client/src/components/ProviderDetails/ProviderProofSetsTable.tsx b/subgraph-client/src/components/ProviderDetails/ProviderProofSetsTable.tsx new file mode 100644 index 0000000..0ba2b4d --- /dev/null +++ b/subgraph-client/src/components/ProviderDetails/ProviderProofSetsTable.tsx @@ -0,0 +1,164 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { ProofSet } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { Pagination } from '@/components/ui/pagination' +import { AlertTriangle } from 'lucide-react' +import { formatDate, formatDataSize } from '@/utility/helper' + +interface ProviderProofSetsTableProps { + proofSets: ProofSet[] + totalProofSets: number + isLoading: boolean + error: any + currentPage: number + onPageChange: (page: number) => void + itemsPerPage: number +} + +export const ProviderProofSetsTable: React.FC = ({ + proofSets, + totalProofSets, + isLoading, + error, + currentPage, + onPageChange, + itemsPerPage, +}) => { + if (isLoading) { + return + } + + if (error && !proofSets?.length) { + return ( + + + Error Loading Proof Sets + + Could not load proof sets for this provider. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + const renderPagination = () => { + if (totalProofSets <= itemsPerPage) return null + return ( +
+ +
+ ) + } + + return ( +
+
+

Proof Sets ({totalProofSets})

+
+
+ {proofSets.length === 0 ? ( +
+ This provider has no proof sets. +
+ ) : ( + + + + + + + + + + + + + + {proofSets.map((proofSet, index) => ( + + + + + + + + + + ))} + +
#Proof Set IDStatusData SizeRootsLast Proven EpochCreated At
+ {(currentPage - 1) * itemsPerPage + index + 1} + + + {proofSet.setId} + + + + {proofSet.isActive ? 'Active' : 'Inactive'} + + + {formatDataSize(proofSet.totalDataSize)} + {proofSet.totalRoots} + {proofSet.lastProvenEpoch + ? Number(proofSet.lastProvenEpoch).toLocaleString() + : 'Never'} + + {formatDate(proofSet.createdAt, false)} +
+ )} +
+ {renderPagination()} +
+ ) +} + +const ProviderProofSetsTableSkeleton: React.FC<{ itemsPerPage: number }> = ({ + itemsPerPage, +}) => ( +
+
+ + {/* */} + {/* */} +
+
+ + + + {[...Array(7)].map((_, i) => ( + + ))} + + + + {[...Array(itemsPerPage)].map((_, i) => ( + + {[...Array(7)].map((_, j) => ( + + ))} + + ))} + +
+ +
+ +
+
+
+) diff --git a/subgraph-client/src/components/Providers/ProvidersTable.tsx b/subgraph-client/src/components/Providers/ProvidersTable.tsx new file mode 100644 index 0000000..42700cd --- /dev/null +++ b/subgraph-client/src/components/Providers/ProvidersTable.tsx @@ -0,0 +1,141 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { Provider } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDate, formatDataSize } from '@/utility/helper' + +interface ProvidersTableProps { + providers: Provider[] + isLoading: boolean + error: any + searchQuery: string +} + +export const ProvidersTable: React.FC = ({ + providers, + isLoading, + error, + searchQuery, +}) => { + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Providers + + Could not load providers list. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (providers.length === 0) { + return ( +
+ No providers found{searchQuery ? ` matching "${searchQuery}"` : ''}. +
+ ) + } + + return ( +
+ + + + + + + + + + + + + + {providers.map((provider) => ( + + + + + + + + + + ))} + +
Provider IDStatusData SizeProof SetsTotal RootsFaultsJoined Date
+ + {`${provider.address.substring( + 0, + 10 + )}...${provider.address.substring( + provider.address.length - 8 + )}`} + + + 0 + ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' + : 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300' + }`} + > + {provider.proofSets?.length > 0 + ? 'Active Sets' + : 'No Active Sets'} + + {formatDataSize(provider.totalDataSize)}{provider.totalProofSets}{provider.totalRoots} + 0 + ? 'text-red-600 font-medium dark:text-red-400' + : 'dark:text-gray-300' + }`} + > + {provider.totalFaultedPeriods} + + {formatDate(provider.createdAt, false)}
+
+ ) +} + +const ProvidersTableSkeleton: React.FC<{ itemsPerPage: number }> = ({ + itemsPerPage, +}) => ( +
+ + + + {[...Array(7)].map((_, i) => ( + + ))} + + + + {[...Array(itemsPerPage)].map((_, i) => ( + + {[...Array(7)].map((_, j) => ( + + ))} + + ))} + +
+ +
+ +
+
+) diff --git a/subgraph-client/src/components/shared/Footer.tsx b/subgraph-client/src/components/shared/Footer.tsx new file mode 100644 index 0000000..81aaabb --- /dev/null +++ b/subgraph-client/src/components/shared/Footer.tsx @@ -0,0 +1,12 @@ +export const Footer = () => { + return ( +
+

+ Made with ❤️ by{' '} + + FilOz + +

+
+ ) +} diff --git a/subgraph-client/src/components/shared/Header.tsx b/subgraph-client/src/components/shared/Header.tsx new file mode 100644 index 0000000..1249443 --- /dev/null +++ b/subgraph-client/src/components/shared/Header.tsx @@ -0,0 +1,7 @@ +export const Header = () => { + return ( +
+

Header

+
+ ) +} diff --git a/subgraph-client/src/components/shared/ThemeProvider.tsx b/subgraph-client/src/components/shared/ThemeProvider.tsx new file mode 100644 index 0000000..cf95e45 --- /dev/null +++ b/subgraph-client/src/components/shared/ThemeProvider.tsx @@ -0,0 +1,74 @@ +import { createContext, useContext, useEffect, useState } from 'react' + +type Theme = 'dark' | 'light' | 'system' + +type ThemeProviderProps = { + children: React.ReactNode + defaultTheme?: Theme + storageKey?: string +} + +type ThemeProviderState = { + theme: Theme + setTheme: (theme: Theme) => void +} + +const initialState: ThemeProviderState = { + theme: 'system', + setTheme: () => null, +} + +const ThemeProviderContext = createContext(initialState) + +export function ThemeProvider({ + children, + defaultTheme = 'light', + storageKey = 'vite-ui-theme', + ...props +}: ThemeProviderProps) { + const [theme, setTheme] = useState( + () => (localStorage.getItem(storageKey) as Theme) || defaultTheme + ) + + useEffect(() => { + const root = window.document.documentElement + + root.classList.remove('light', 'dark') + + if (theme === 'system') { + const systemTheme = window.matchMedia('(prefers-color-scheme: dark)') + .matches + ? 'dark' + : 'light' + + root.classList.add(systemTheme) + return + } + + root.classList.add(theme) + }, [theme]) + + const value = { + theme, + setTheme: (theme: Theme) => { + localStorage.setItem(storageKey, theme) + setTheme(theme) + }, + } + + return ( + + {children} + + ) +} + +// eslint-disable-next-line react-refresh/only-export-components +export const useTheme = () => { + const context = useContext(ThemeProviderContext) + + if (context === undefined) + throw new Error('useTheme must be used within a ThemeProvider') + + return context +} diff --git a/subgraph-client/src/components/shared/ThemeToggle.tsx b/subgraph-client/src/components/shared/ThemeToggle.tsx new file mode 100644 index 0000000..0c3728c --- /dev/null +++ b/subgraph-client/src/components/shared/ThemeToggle.tsx @@ -0,0 +1,37 @@ +import { Moon, Sun } from 'lucide-react' + +import { Button } from '@/components/ui/button' +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu' +import { useTheme } from '@/components/shared/ThemeProvider' + +export function ModeToggle() { + const { setTheme } = useTheme() + + return ( + + + + + + setTheme('light')}> + Light + + setTheme('dark')}> + Dark + + setTheme('system')}> + System + + + + ) +} diff --git a/subgraph-client/src/components/ui/alert.tsx b/subgraph-client/src/components/ui/alert.tsx new file mode 100644 index 0000000..41fa7e0 --- /dev/null +++ b/subgraph-client/src/components/ui/alert.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const alertVariants = cva( + "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground", + { + variants: { + variant: { + default: "bg-background text-foreground", + destructive: + "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const Alert = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes & VariantProps +>(({ className, variant, ...props }, ref) => ( +
+)) +Alert.displayName = "Alert" + +const AlertTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertTitle.displayName = "AlertTitle" + +const AlertDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)) +AlertDescription.displayName = "AlertDescription" + +export { Alert, AlertTitle, AlertDescription } diff --git a/subgraph-client/src/components/ui/button.tsx b/subgraph-client/src/components/ui/button.tsx new file mode 100644 index 0000000..0ba4277 --- /dev/null +++ b/subgraph-client/src/components/ui/button.tsx @@ -0,0 +1,56 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + { + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/subgraph-client/src/components/ui/card.tsx b/subgraph-client/src/components/ui/card.tsx new file mode 100644 index 0000000..7e5169c --- /dev/null +++ b/subgraph-client/src/components/ui/card.tsx @@ -0,0 +1,59 @@ +import * as React from 'react' + +export function Card({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export function CardHeader({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} + +export function CardTitle({ + className, + ...props +}: React.HTMLAttributes) { + return ( +

+ ) +} + +export function CardDescription({ + className, + ...props +}: React.HTMLAttributes) { + return ( +

+ ) +} + +export function CardContent({ + className, + ...props +}: React.HTMLAttributes) { + return

+} + +export function CardFooter({ + className, + ...props +}: React.HTMLAttributes) { + return ( +
+ ) +} diff --git a/subgraph-client/src/components/ui/chart.tsx b/subgraph-client/src/components/ui/chart.tsx new file mode 100644 index 0000000..4fae873 --- /dev/null +++ b/subgraph-client/src/components/ui/chart.tsx @@ -0,0 +1,365 @@ +'use client' + +import * as React from 'react' +import * as RechartsPrimitive from 'recharts' + +import { cn } from '@/lib/utils' + +// Format: { THEME_NAME: CSS_SELECTOR } +const THEMES = { light: '', dark: '.dark' } as const + +export type ChartConfig = { + [k in string]: { + label?: React.ReactNode + icon?: React.ComponentType + } & ( + | { color?: string; theme?: never } + | { color?: never; theme: Record } + ) +} + +type ChartContextProps = { + config: ChartConfig +} + +const ChartContext = React.createContext(null) + +function useChart() { + const context = React.useContext(ChartContext) + + if (!context) { + throw new Error('useChart must be used within a ') + } + + return context +} + +const ChartContainer = React.forwardRef< + HTMLDivElement, + React.ComponentProps<'div'> & { + config: ChartConfig + children: React.ComponentProps< + typeof RechartsPrimitive.ResponsiveContainer + >['children'] + } +>(({ id, className, children, config, ...props }, ref) => { + const uniqueId = React.useId() + const chartId = `chart-${id || uniqueId.replace(/:/g, '')}` + + return ( + +
+ + + {children} + +
+
+ ) +}) +ChartContainer.displayName = 'Chart' + +const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => { + const colorConfig = Object.entries(config).filter( + ([, config]) => config.theme || config.color + ) + + if (!colorConfig.length) { + return null + } + + return ( + + ) + + useEffect(() => { + NProgress.configure({ showSpinner: false }) + + const handleAnchorClick = (event: MouseEvent) => { + const targetUrl = (event.currentTarget as HTMLAnchorElement).href + const currentUrl = location.href + if (targetUrl !== currentUrl) { + NProgress.start() + } + } + + const handleMutation: MutationCallback = () => { + const anchorElements = document.querySelectorAll('a') + anchorElements.forEach((anchor) => + anchor.addEventListener('click', handleAnchorClick) + ) + } + + const mutationObserver = new MutationObserver(handleMutation) + mutationObserver.observe(document, { childList: true, subtree: true }) + + window.history.pushState = new Proxy(window.history.pushState, { + apply: (target, thisArg, argArray: PushStateInput) => { + NProgress.done() + return target.apply(thisArg, argArray) + }, + }) + }) + + return styles +} diff --git a/subgraph-client/src/components/ui/toast.tsx b/subgraph-client/src/components/ui/toast.tsx new file mode 100644 index 0000000..2a1b14b --- /dev/null +++ b/subgraph-client/src/components/ui/toast.tsx @@ -0,0 +1,127 @@ +import * as React from 'react' +import * as ToastPrimitives from '@radix-ui/react-toast' +import { cva, type VariantProps } from 'class-variance-authority' +import { X } from 'lucide-react' + +import { cn } from '@/lib/utils' + +const ToastProvider = ToastPrimitives.Provider + +const ToastViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastViewport.displayName = ToastPrimitives.Viewport.displayName + +const toastVariants = cva( + 'group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full', + { + variants: { + variant: { + default: 'border bg-background text-foreground', + destructive: + 'destructive group border-destructive bg-destructive text-destructive-foreground', + }, + }, + defaultVariants: { + variant: 'default', + }, + } +) + +const Toast = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, variant, ...props }, ref) => { + return ( + + ) +}) +Toast.displayName = ToastPrimitives.Root.displayName + +const ToastAction = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastAction.displayName = ToastPrimitives.Action.displayName + +const ToastClose = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +ToastClose.displayName = ToastPrimitives.Close.displayName + +const ToastTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastTitle.displayName = ToastPrimitives.Title.displayName + +const ToastDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastDescription.displayName = ToastPrimitives.Description.displayName + +type ToastProps = React.ComponentPropsWithoutRef + +type ToastActionElement = React.ReactElement + +export { + type ToastProps, + type ToastActionElement, + ToastProvider, + ToastViewport, + Toast, + ToastTitle, + ToastDescription, + ToastClose, + ToastAction, +} diff --git a/subgraph-client/src/components/ui/toaster.tsx b/subgraph-client/src/components/ui/toaster.tsx new file mode 100644 index 0000000..daef121 --- /dev/null +++ b/subgraph-client/src/components/ui/toaster.tsx @@ -0,0 +1,33 @@ +import { useToast } from '@/hooks/use-toast' +import { + Toast, + ToastClose, + ToastDescription, + ToastProvider, + ToastTitle, + ToastViewport, +} from '@/components/ui/toast' + +export function Toaster() { + const { toasts } = useToast() + + return ( + + {toasts.map(function ({ id, title, description, action, ...props }) { + return ( + +
+ {title && {title}} + {description && ( + {description} + )} +
+ {action} + +
+ ) + })} + +
+ ) +} diff --git a/subgraph-client/src/hooks/use-toast.ts b/subgraph-client/src/hooks/use-toast.ts new file mode 100644 index 0000000..fd4fa38 --- /dev/null +++ b/subgraph-client/src/hooks/use-toast.ts @@ -0,0 +1,191 @@ +'use client' + +// Inspired by react-hot-toast library +import * as React from 'react' + +import type { ToastActionElement, ToastProps } from '@/components/ui/toast' + +const TOAST_LIMIT = 5 +const TOAST_REMOVE_DELAY = 5000 + +export type ToasterToast = ToastProps & { + id: string + title?: React.ReactNode + description?: React.ReactNode + action?: ToastActionElement +} + +const actionTypes = { + ADD_TOAST: 'ADD_TOAST', + UPDATE_TOAST: 'UPDATE_TOAST', + DISMISS_TOAST: 'DISMISS_TOAST', + REMOVE_TOAST: 'REMOVE_TOAST', +} as const + +let count = 0 + +function genId() { + count = (count + 1) % Number.MAX_SAFE_INTEGER + return count.toString() +} + +type ActionType = typeof actionTypes + +type Action = + | { + type: ActionType['ADD_TOAST'] + toast: ToasterToast + } + | { + type: ActionType['UPDATE_TOAST'] + toast: Partial + } + | { + type: ActionType['DISMISS_TOAST'] + toastId?: ToasterToast['id'] + } + | { + type: ActionType['REMOVE_TOAST'] + toastId?: ToasterToast['id'] + } + +interface State { + toasts: ToasterToast[] +} + +const toastTimeouts = new Map>() + +const addToRemoveQueue = (toastId: string) => { + if (toastTimeouts.has(toastId)) { + return + } + + const timeout = setTimeout(() => { + toastTimeouts.delete(toastId) + dispatch({ + type: 'REMOVE_TOAST', + toastId: toastId, + }) + }, TOAST_REMOVE_DELAY) + + toastTimeouts.set(toastId, timeout) +} + +export const reducer = (state: State, action: Action): State => { + switch (action.type) { + case 'ADD_TOAST': + return { + ...state, + toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT), + } + + case 'UPDATE_TOAST': + return { + ...state, + toasts: state.toasts.map((t) => + t.id === action.toast.id ? { ...t, ...action.toast } : t + ), + } + + case 'DISMISS_TOAST': { + const { toastId } = action + + // ! Side effects ! - This could be extracted into a dismissToast() action, + // but I'll keep it here for simplicity + if (toastId) { + addToRemoveQueue(toastId) + } else { + state.toasts.forEach((toast) => { + addToRemoveQueue(toast.id) + }) + } + + return { + ...state, + toasts: state.toasts.map((t) => + t.id === toastId || toastId === undefined + ? { + ...t, + open: false, + } + : t + ), + } + } + case 'REMOVE_TOAST': + if (action.toastId === undefined) { + return { + ...state, + toasts: [], + } + } + return { + ...state, + toasts: state.toasts.filter((t) => t.id !== action.toastId), + } + } +} + +const listeners: Array<(state: State) => void> = [] + +let memoryState: State = { toasts: [] } + +function dispatch(action: Action) { + memoryState = reducer(memoryState, action) + listeners.forEach((listener) => { + listener(memoryState) + }) +} + +export type Toast = Omit + +function toast({ ...props }: Toast) { + const id = genId() + + const update = (props: ToasterToast) => + dispatch({ + type: 'UPDATE_TOAST', + toast: { ...props, id }, + }) + const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id }) + + dispatch({ + type: 'ADD_TOAST', + toast: { + ...props, + id, + open: true, + onOpenChange: (open) => { + if (!open) dismiss() + }, + }, + }) + + return { + id: id, + dismiss, + update, + } +} + +function useToast() { + const [state, setState] = React.useState(memoryState) + + React.useEffect(() => { + listeners.push(setState) + return () => { + const index = listeners.indexOf(setState) + if (index > -1) { + listeners.splice(index, 1) + } + } + }, [state]) + + return { + ...state, + toast, + dismiss: (toastId?: string) => dispatch({ type: 'DISMISS_TOAST', toastId }), + } +} + +export { useToast, toast } diff --git a/subgraph-client/src/main.tsx b/subgraph-client/src/main.tsx index 44be4c2..148a08e 100644 --- a/subgraph-client/src/main.tsx +++ b/subgraph-client/src/main.tsx @@ -7,6 +7,8 @@ import { ThemeProvider } from '@/components/shared/ThemeProvider' import { SWRConfig } from 'swr' import { fetcher } from '@/utility/fetcher' import { NetworkProvider } from '@/contexts/NetworkContext' +import { Toaster } from '@/components/ui/toaster' +import { ProgressBar } from '@/components/shared/ProgressBar' ReactDOM.createRoot(document.getElementById('root')!).render( @@ -22,7 +24,9 @@ ReactDOM.createRoot(document.getElementById('root')!).render( > + + diff --git a/subgraph-client/src/pages/Landing.tsx b/subgraph-client/src/pages/Landing.tsx index 4a585ea..16e0ab3 100644 --- a/subgraph-client/src/pages/Landing.tsx +++ b/subgraph-client/src/pages/Landing.tsx @@ -1,6 +1,14 @@ -import { useState } from 'react' +import { useState, useRef } from 'react' import { Link, useNavigate } from 'react-router-dom' -import { Github, FileCode, Search, Book, Calculator } from 'lucide-react' +import { + Github, + FileCode, + Search, + Book, + Calculator, + Loader2, + X, +} from 'lucide-react' import { search, SearchResult } from '@/api/apiService' import { formatDataSize } from '@/utility/helper' import { networkContractAddresses, explorerUrls } from '@/utility/constants' @@ -12,6 +20,7 @@ import { RecentProofSetsTable } from '@/components/Landing/RecentProofSetsTable' import { RecentProvidersTable } from '@/components/Landing/RecentProvidersTable' import { NetworkSelector } from '@/components/shared/NetworkSelector' import { useNetwork } from '@/contexts/NetworkContext' +import { useToast } from '@/hooks/use-toast' // import { ModeToggle } from '@/components/shared/ThemeToggle' const ITEMS_PER_PAGE = 10 // How many recent items to show @@ -20,7 +29,11 @@ export const Landing = () => { const navigate = useNavigate() const [searchQuery, setSearchQuery] = useState('') const [searchResults, setSearchResults] = useState([]) + const [isSearching, setIsSearching] = useState(false) + const [searchError, setSearchError] = useState(null) const { subgraphUrl, network } = useNetwork() + const { toast } = useToast() + const inputRef = useRef(null) const { data: landingData, @@ -40,27 +53,60 @@ export const Landing = () => { { revalidateOnFocus: false, errorRetryCount: 2 } ) + const clearSearch = () => { + setSearchQuery('') + setSearchResults([]) + setSearchError(null) + if (inputRef.current) { + inputRef.current.focus() + } + } + const handleSearch = async (e: React.FormEvent) => { e.preventDefault() + const trimmedQuery = searchQuery.trim() + if (!trimmedQuery) { + setSearchError('Please enter a search term') + return + } + + setIsSearching(true) + setSearchError(null) + try { - const response = await search(subgraphUrl, searchQuery.trim()) + const response = await search(subgraphUrl, trimmedQuery, toast) const results = response if (results.length === 1) { + // Single result - navigate directly const path = results[0].type === 'provider' ? `/providers/${results[0].id}` : `/proofsets/${results[0].id}` navigate(path) } else if (results.length > 1) { + // Multiple results - show dropdown setSearchResults(results) } else { + // No results setSearchResults([]) + toast({ + title: 'No results found', + description: 'Try a different search term', + variant: 'default', + }) } } catch (error) { - console.error('Search failed:', error) + toast({ + title: 'Search failed', + description: error instanceof Error ? error.message : 'Unknown error', + variant: 'destructive', + }) setSearchResults([]) + setSearchError(error instanceof Error ? error.message : 'Search failed') + } finally { + setIsSearching(false) } } @@ -116,29 +162,71 @@ export const Landing = () => {
- { - setSearchQuery(e.target.value) - if (!e.target.value.trim()) { - setSearchResults([]) // Clear results when input is cleared - } - }} - /> - - +
+ { + setSearchQuery(e.target.value) + setSearchError(null) + if (!e.target.value.trim()) { + setSearchResults([]) // Clear results when input is cleared + } + }} + onKeyDown={(e) => { + if (e.key === 'Escape') { + clearSearch() + } + }} + aria-invalid={!!searchError} + aria-describedby={searchError ? 'search-error' : undefined} + /> + + + {searchQuery && ( + + )} + + +
+ + {searchError && ( +
+ {searchError} +
+ )} {searchResults.length > 0 && ( -
+
{searchResults.map((result) => ( { ? `/providers/${result.id}` : `/proofsets/${result.id}` } - className="block p-3 hover:bg-gray-100 border-b last:border-b-0" + className="block p-3 hover:bg-gray-100 dark:hover:bg-gray-700 border-b dark:border-gray-700 last:border-b-0 transition-colors" onClick={() => setSearchResults([])} // Close dropdown on click >

From f8764e0471d3616cf884b8583be28d52799bb2a0 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Thu, 1 May 2025 04:57:35 +0530 Subject: [PATCH 39/51] feat: allow to copy values --- .../Landing/RecentProofSetsTable.tsx | 32 ++++---- .../Landing/RecentProvidersTable.tsx | 21 ++--- .../ProofSetDetails/ActivityTabs.tsx | 42 ++++------ .../components/ProofSetDetails/RootsTable.tsx | 9 ++- .../src/components/shared/CopyButton.tsx | 80 +++++++++++++++++++ .../src/components/shared/CopyableText.tsx | 63 +++++++++++++++ 6 files changed, 194 insertions(+), 53 deletions(-) create mode 100644 subgraph-client/src/components/shared/CopyButton.tsx create mode 100644 subgraph-client/src/components/shared/CopyableText.tsx diff --git a/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx b/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx index 6bccf09..6c7fbe1 100644 --- a/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx +++ b/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx @@ -1,10 +1,10 @@ import React from 'react' -import { Link } from 'react-router-dom' import { ProofSet } from '@/utility/types' import { Skeleton } from '@/components/ui/skeleton' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { AlertTriangle } from 'lucide-react' import { formatDataSize, formatDate } from '@/utility/helper' +import { CopyableText } from '@/components/shared/CopyableText' interface RecentProofSetsTableProps { proofSets?: ProofSet[] @@ -64,26 +64,22 @@ export const RecentProofSetsTable: React.FC = ({ className="border-b hover:bg-gray-50 dark:hover:bg-gray-700 dark:border-gray-700 text-sm" > - - {proofSet.setId} - + label="Proof Set ID" + monospace={true} + /> - - + - {`${proofSet.owner.address.substring( - 0, - 8 - )}...${proofSet.owner.address.substring( - proofSet.owner.address.length - 6 - )}`} - + truncate={true} + truncateLength={8} + label="Provider address" + monospace={true} + /> = ({ {providers.map((provider) => ( - - - + + - {provider.address} - + truncate={false} + label="Provider address" + monospace={true} + /> {provider.totalProofSets} {provider.totalRoots} diff --git a/subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx b/subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx index 3f88934..8d537bc 100644 --- a/subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx +++ b/subgraph-client/src/components/ProofSetDetails/ActivityTabs.tsx @@ -20,6 +20,7 @@ import { } from '@/utility/constants' import JsonDisplay from '@/components/ProofSetDetails/JsonDisplay' import { useNetwork } from '@/contexts/NetworkContext' +import { CopyableText } from '../shared/CopyableText' interface ActivityTabsProps { transactions: Transaction[] @@ -148,17 +149,14 @@ export const ActivityTabs: React.FC = ({ className="border-b hover:bg-gray-50 dark:hover:bg-gray-600 dark:border-gray-700" > - - {`${tx.hash.substring(0, 8)}...${tx.hash.substring( - tx.hash.length - 8 - )}`} - + {Number(tx.height).toLocaleString()} @@ -234,20 +232,14 @@ export const ActivityTabs: React.FC = ({ > {log.name} - - {`${log.transactionHash.substring( - 0, - 8 - )}...${log.transactionHash.substring( - log.transactionHash.length - 8 - )}`} - + {log.blockNumber} {formatDate(log.createdAt)} diff --git a/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx index 9c5a074..ada2fbd 100644 --- a/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx +++ b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx @@ -5,6 +5,7 @@ import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { Pagination } from '@/components/ui/pagination' import { AlertTriangle } from 'lucide-react' import { formatDate, formatDataSize, decodeRootCid } from '@/utility/helper' +import { CopyableText } from '../shared/CopyableText' interface RootsTableProps { roots: Root[] @@ -85,7 +86,13 @@ export const RootsTable: React.FC = ({ className="border-b hover:bg-gray-50 dark:hover:bg-gray-600 dark:border-gray-700" > {root.rootId} - {cidStr} + + + {formatDataSize(root.rawSize)} { + const [copied, setCopied] = useState(false) + const { toast } = useToast() + + const handleCopy = async (e: React.MouseEvent) => { + e.stopPropagation() + + try { + await navigator.clipboard.writeText(value) + setCopied(true) + + toast({ + title: 'Success', + description: successMessage, + variant: 'default', + }) + + // Reset copied state after 2 seconds + setTimeout(() => setCopied(false), 2000) + } catch (error) { + toast({ + title: 'Error', + description: 'Failed to copy to clipboard', + variant: 'destructive', + }) + } + } + + return ( + + ) +} diff --git a/subgraph-client/src/components/shared/CopyableText.tsx b/subgraph-client/src/components/shared/CopyableText.tsx new file mode 100644 index 0000000..5e56029 --- /dev/null +++ b/subgraph-client/src/components/shared/CopyableText.tsx @@ -0,0 +1,63 @@ +import { Link } from 'react-router-dom' +import { cn } from '@/lib/utils' +import { CopyButton } from './CopyButton' + +interface CopyableTextProps { + value: string + to?: string + label?: string + truncate?: boolean + truncateLength?: number + className?: string + linkClassName?: string + monospace?: boolean +} + +export const CopyableText = ({ + value, + to, + label = 'Text', + truncate = false, + truncateLength = 8, + className, + linkClassName, + monospace = true, +}: CopyableTextProps) => { + // Format value for display if truncation is enabled + const displayValue = + truncate && value.length > truncateLength * 2 + ? `${value.substring(0, truncateLength)}...${value.substring( + value.length - truncateLength + )}` + : value + + return ( +

+ {to ? ( + + {displayValue} + + ) : ( + {displayValue} + )} + +
+ ) +} From 6a83797b5677931dc7e7c7a61911a8cee086f03a Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Thu, 1 May 2025 04:58:20 +0530 Subject: [PATCH 40/51] include package --- subgraph-client/package-lock.json | 343 ++++++++++++++++++++++++++++++ subgraph-client/package.json | 2 + 2 files changed, 345 insertions(+) diff --git a/subgraph-client/package-lock.json b/subgraph-client/package-lock.json index fb7bb08..52db7f9 100644 --- a/subgraph-client/package-lock.json +++ b/subgraph-client/package-lock.json @@ -20,6 +20,7 @@ "@radix-ui/react-select": "^2.1.6", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-toast": "^1.2.11", "@radix-ui/react-tooltip": "^1.1.7", "@types/js-cookie": "^3.0.6", "@uiw/react-json-view": "^2.0.0-alpha.30", @@ -35,6 +36,7 @@ "mini-svg-data-uri": "^1.4.4", "multiformats": "^13.3.2", "next-themes": "^0.3.0", + "nprogress": "^0.2.0", "react": "^18.2.0", "react-day-picker": "^8.10.0", "react-dom": "^18.2.0", @@ -4634,6 +4636,308 @@ } } }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.11.tgz", + "integrity": "sha512-Ed2mlOmT+tktOsu2NZBK1bCSHh/uqULu1vWOkpQTVq53EoOuZUZw7FInQoDB3uil5wZc2oe0XN9a7uVZB7/6AQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-collection": "1.1.4", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.7", + "@radix-ui/react-portal": "1.1.6", + "@radix-ui/react-presence": "1.1.4", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/primitive": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.2.tgz", + "integrity": "sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-collection": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.4.tgz", + "integrity": "sha512-cv4vSf7HttqXilDnAnvINd53OTl1/bjUYVZrkFnA7nwmY9Ob2POUy0WY0sfqBAe1s5FyKsyceQlqiEGPYNTadg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-slot": "1.2.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.7.tgz", + "integrity": "sha512-j5+WBUdhccJsmH5/H0K6RncjDtoALSEr6jbkaZu+bjw6hOPOhHycr6vEUujl+HBK8kjUfWcoCJXxP6e4lUlMZw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.2", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-portal": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.6.tgz", + "integrity": "sha512-XmsIl2z1n/TsYFLIdYam2rmFwf9OC/Sh2avkbmVMDuBZIe7hSpM0cYnWPAo7nHOVx8zTuwDZGByfcqLdnzp3Vw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-presence": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.4.tgz", + "integrity": "sha512-ueDqRbdc4/bkaQT3GIpLQssRlFgWaL/U2z/S31qRwwLWoxHLgry3SIfCwhxeQNbirEUXFa+lq3RL3oBYXtcmIA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.0.tgz", + "integrity": "sha512-/J/FhLdK0zVcILOwt5g+dH4KnkonCtkVJsa2G6JmvbbtZfBEI1gMsO3QMjseL4F/SwfAMt1Vc/0XKYKq+xJ1sw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.0.tgz", + "integrity": "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.0.tgz", + "integrity": "sha512-rQj0aAWOpCdCMRbI6pLQm8r7S2BM3YhTa0SzOYD55k+hJA8oo9J+H+9wLM9oMlZWOX/wJWPTzfDfmZkf7LvCfg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-tooltip": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.7.tgz", @@ -5036,6 +5340,39 @@ } } }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event/node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-use-escape-keydown": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", @@ -10314,6 +10651,12 @@ "node": ">=0.10.0" } }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", diff --git a/subgraph-client/package.json b/subgraph-client/package.json index e0d73dc..6282fa0 100644 --- a/subgraph-client/package.json +++ b/subgraph-client/package.json @@ -22,6 +22,7 @@ "@radix-ui/react-select": "^2.1.6", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tabs": "^1.1.3", + "@radix-ui/react-toast": "^1.2.11", "@radix-ui/react-tooltip": "^1.1.7", "@types/js-cookie": "^3.0.6", "@uiw/react-json-view": "^2.0.0-alpha.30", @@ -37,6 +38,7 @@ "mini-svg-data-uri": "^1.4.4", "multiformats": "^13.3.2", "next-themes": "^0.3.0", + "nprogress": "^0.2.0", "react": "^18.2.0", "react-day-picker": "^8.10.0", "react-dom": "^18.2.0", From 0a77182abc440ca48ed6d0f01236f65dd862e37b Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Wed, 4 Jun 2025 14:38:35 +0530 Subject: [PATCH 41/51] add network slug in url path --- .../src/components/shared/NetworkSelector.tsx | 20 +++++ .../src/contexts/NetworkContext.tsx | 39 +++++++++- subgraph-client/src/main.tsx | 32 ++++---- subgraph-client/src/router/routes.tsx | 75 +++++++++++++++++-- 4 files changed, 142 insertions(+), 24 deletions(-) diff --git a/subgraph-client/src/components/shared/NetworkSelector.tsx b/subgraph-client/src/components/shared/NetworkSelector.tsx index 1dd2817..bbd28c8 100644 --- a/subgraph-client/src/components/shared/NetworkSelector.tsx +++ b/subgraph-client/src/components/shared/NetworkSelector.tsx @@ -1,16 +1,36 @@ import { useState } from 'react' import { useNetwork, Network } from '@/contexts/NetworkContext' +import { useNavigate, useLocation } from 'react-router-dom' export const NetworkSelector = () => { const { network, setNetwork } = useNetwork() const [isOpen, setIsOpen] = useState(false) + const navigate = useNavigate() + const location = useLocation() const toggleDropdown = () => setIsOpen(!isOpen) const closeDropdown = () => setIsOpen(false) const handleNetworkChange = (newNetwork: Network) => { + if (network === newNetwork) { + closeDropdown() + return + } + setNetwork(newNetwork) closeDropdown() + + // Update URL to reflect the new network + const pathParts = location.pathname.split('/') + + // If the path already has a network identifier, replace it + if (pathParts[1] === 'mainnet' || pathParts[1] === 'calibration') { + const newPath = ['', newNetwork, ...pathParts.slice(2)].join('/') + navigate(newPath + location.search + location.hash) + } else { + // Otherwise, navigate to the network root + navigate(`/${newNetwork}` + location.search + location.hash) + } } // Network display names and colors diff --git a/subgraph-client/src/contexts/NetworkContext.tsx b/subgraph-client/src/contexts/NetworkContext.tsx index 77c2e53..f84ee1c 100644 --- a/subgraph-client/src/contexts/NetworkContext.tsx +++ b/subgraph-client/src/contexts/NetworkContext.tsx @@ -1,5 +1,6 @@ -import { createContext, useContext, ReactNode } from 'react' +import { createContext, useContext, ReactNode, useEffect } from 'react' import useLocalStorage from '@/hooks/useLocalStorage' +import { useLocation, useNavigate } from 'react-router-dom' export type Network = 'mainnet' | 'calibration' @@ -16,6 +17,8 @@ export const NetworkProvider = ({ children }: { children: ReactNode }) => { 'pdp-network', 'mainnet' ) + const location = useLocation() + const navigate = useNavigate() const getSubgraphUrl = (network: Network) => { const PROJECT_ID = import.meta.env.VITE_GOLDSKY_PROJECT_ID || '' @@ -34,6 +37,40 @@ export const NetworkProvider = ({ children }: { children: ReactNode }) => { const subgraphUrl = getSubgraphUrl(network) + // Handle network parameter in URL + useEffect(() => { + const params = new URLSearchParams(location.search) + const networkParam = params.get('network')?.toLowerCase() + + if ( + networkParam && + (networkParam === 'mainnet' || networkParam === 'calibration') && + networkParam !== network + ) { + setNetwork(networkParam) + + // Remove the network parameter from URL after processing + params.delete('network') + const newSearch = params.toString() ? `?${params.toString()}` : '' + const newPath = location.pathname + newSearch + location.hash + navigate(newPath, { replace: true }) + } + }, [location.search, network, setNetwork, navigate]) + + // Handle network-specific paths + useEffect(() => { + const path = location.pathname + const pathParts = path.split('/') + + // If the path already starts with a network identifier, update local state + if ( + (pathParts[1] === 'mainnet' || pathParts[1] === 'calibration') && + pathParts[1] !== network + ) { + setNetwork(pathParts[1] as Network) + } + }, [location.pathname, network, navigate]) + return ( {children} diff --git a/subgraph-client/src/main.tsx b/subgraph-client/src/main.tsx index 148a08e..0e0bc0f 100644 --- a/subgraph-client/src/main.tsx +++ b/subgraph-client/src/main.tsx @@ -12,24 +12,24 @@ import { ProgressBar } from '@/components/shared/ProgressBar' ReactDOM.createRoot(document.getElementById('root')!).render( - - console.error('GraphQL SWR error:', err), - }} - > - - + console.error('GraphQL SWR error:', err), + }} + > + + + - - - - + + + + ) diff --git a/subgraph-client/src/router/routes.tsx b/subgraph-client/src/router/routes.tsx index 4043da4..b6c4ca4 100644 --- a/subgraph-client/src/router/routes.tsx +++ b/subgraph-client/src/router/routes.tsx @@ -5,20 +5,81 @@ import { ProviderDetails } from '@/pages/ProviderDetails' import { Providers } from '@/pages/Providers' import { Documentation } from '@/pages/Documentation' import { GasCalculator } from '@/pages/GasCalculator' -import { Route, Routes } from 'react-router-dom' +import { + Route, + Routes, + Navigate, + useParams, + useNavigate, +} from 'react-router-dom' +import { useNetwork } from '@/contexts/NetworkContext' +import { useEffect } from 'react' + +// Redirect component with parameter capture +const CustomRedirect = ({ + slug, + midPath, +}: { + slug: string + midPath: string +}) => { + const params = useParams() + const { network } = useNetwork() + const navigate = useNavigate() + + useEffect(() => { + navigate(`/${network}/${midPath}/${params[slug]}`, { replace: true }) + }, [network, params[slug], navigate]) + + return null +} const AppRoutes = () => { + const { network } = useNetwork() + return ( - } /> - } /> - } /> - } /> - } /> + {/* Root route redirects to network-specific path */} + } /> + + {/* Network-specific routes */} + } /> + } /> + } + /> + } /> + } + /> + + {/* Network-agnostic routes */} } /> } /> } /> - } /> + + {/* Legacy routes for backward compatibility */} + } + /> + } + /> + } + /> + } + /> + + {/* Catch-all route */} + } /> ) } From af58a715c5550ffa225e107510c8f7004a56ed8d Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 6 Jun 2025 09:14:32 +0530 Subject: [PATCH 42/51] use try_getRandomness to check for reverts --- subgraph/src/pdp-service.ts | 9 +++++---- subgraph/src/sumTree.ts | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index fd8019b..4e22dd5 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -111,16 +111,17 @@ export function findChallengedRoots( Address.fromBytes(Bytes.fromHexString(PDPVerifierAddress)) ); - const seedInt = instance.getRandomness(challengeEpoch); - const seedHex = ensureEvenHex(seedInt); - - if (!seedInt) { + const seedIntResult = instance.try_getRandomness(challengeEpoch); + if (seedIntResult.reverted) { log.warning("findChallengedRoots: Failed to get randomness for epoch {}", [ challengeEpoch.toString(), ]); return []; } + const seedInt = seedIntResult.value; + const seedHex = ensureEvenHex(seedInt); + const challenges: BigInt[] = []; if (totalLeaves.isZero()) { log.warning( diff --git a/subgraph/src/sumTree.ts b/subgraph/src/sumTree.ts index 3774c73..4d3b1be 100644 --- a/subgraph/src/sumTree.ts +++ b/subgraph/src/sumTree.ts @@ -1,4 +1,4 @@ -import { BigInt, Bytes, log } from "@graphprotocol/graph-ts"; +import { BigInt, Bytes } from "@graphprotocol/graph-ts"; import { SumTreeCount } from "../generated/schema"; // Define a class for the structure instead of a type alias From 60ccc866e6cbfcedc70779a7d3991d947d9e93ea Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 6 Jun 2025 13:15:09 +0530 Subject: [PATCH 43/51] track service contracts --- subgraph/schema.graphql | 28 ++++++- subgraph/src/pdp-service.ts | 13 +++ subgraph/src/pdp-verifier.ts | 155 ++++++++++++++++++++++++++++++++--- subgraph/subgraph.yaml | 4 + 4 files changed, 187 insertions(+), 13 deletions(-) diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index 271eab5..a7dc58c 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -1,7 +1,7 @@ type ProofSet @entity(immutable: false) { id: Bytes! # setId setId: BigInt! # uint256 - listener: Bytes! # address + listener: Service! # address owner: Provider! # address of the provider leafCount: BigInt! # uint256 challengeRange: BigInt! # uint256 @@ -31,6 +31,30 @@ type ProofSet @entity(immutable: false) { monthlyActivities: [MonthlyProofSetActivity!]! @derivedFrom(field: "proofSet") } +type Service @entity(immutable: false) { + id: Bytes! # address + address: Bytes! # Service Contract Address + totalProofSets: BigInt! # uint256 + totalProviders: BigInt! # uint256 + totalRoots: BigInt! # uint256 + totalDataSize: BigInt! # uint256 + totalFaultedRoots: BigInt! + totalFaultedPeriods: BigInt! + createdAt: BigInt! + updatedAt: BigInt! + # Relationships + proofSets: [ProofSet!]! @derivedFrom(field: "listener") + providerLinks: [ServiceProviderLink!]! @derivedFrom(field: "service") +} + +type ServiceProviderLink @entity(immutable: false) { + id: Bytes! + totalProofSets: BigInt! + # Relationships + service: Service! + provider: Provider! +} + type Provider @entity(immutable: false) { id: Bytes! # address address: Bytes! @@ -45,6 +69,7 @@ type Provider @entity(immutable: false) { # Derived relationship proofSets: [ProofSet!]! @derivedFrom(field: "owner") + serviceLinks: [ServiceProviderLink!]! @derivedFrom(field: "provider") weeklyProviderActivities: [WeeklyProviderActivity!]! @derivedFrom(field: "provider") monthlyProviderActivities: [MonthlyProviderActivity!]! @@ -149,6 +174,7 @@ type NetworkMetric @entity(immutable: false) { totalProvedRoots: BigInt # uint256 totalFaultedPeriods: BigInt # uint256 totalFaultedRoots: BigInt # uint256 + totalServices: BigInt # uint256 } type WeeklyProviderActivity @entity(immutable: false) { diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index 4e22dd5..af24899 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -8,6 +8,7 @@ import { Provider, FaultRecord, Root, + Service, } from "../generated/schema"; import { saveNetworkMetrics, @@ -309,6 +310,18 @@ export function handleFaultRecord(event: FaultRecordEvent): void { ]); } + // update Service stats + const service = Service.load(proofSet.listener); + if (service) { + service.totalFaultedPeriods = + service.totalFaultedPeriods.plus(periodsFaultedParam); + service.totalFaultedRoots = service.totalFaultedRoots.plus( + BigInt.fromI32(uniqueRootIds.length) + ); + service.updatedAt = event.block.number; + service.save(); + } + // Update network metrics const keys = ["totalFaultedPeriods", "totalFaultedRoots"]; const values = [periodsFaultedParam, BigInt.fromI32(uniqueRootIds.length)]; diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index 758835a..571e55a 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -16,6 +16,8 @@ import { ProofSet, Root, Transaction, + Service, + ServiceProviderLink, } from "../generated/schema"; import { saveProviderMetrics, @@ -34,6 +36,13 @@ function getRootEntityId(setId: BigInt, rootId: BigInt): Bytes { return Bytes.fromUTF8(setId.toString() + "-" + rootId.toString()); } +function getServiceProviderLinkEntityId( + serviceAddr: Bytes, + providerAddr: Bytes +): Bytes { + return serviceAddr.concat(providerAddr); +} + function getTransactionEntityId(txHash: Bytes): Bytes { return txHash; } @@ -116,6 +125,12 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { proofSet.blockNumber = event.block.number; proofSet.save(); + // network metrics variables + let network_totalProofSets = BigInt.fromI32(1); + let network_totalActiveProofSets = BigInt.fromI32(1); + let network_totalProviders = BigInt.fromI32(0); + let network_totalServices = BigInt.fromI32(0); + // Create or Update Provider let provider = Provider.load(providerEntityId); if (provider == null) { @@ -130,27 +145,73 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { provider.blockNumber = event.block.number; // update network metrics - saveNetworkMetrics( - ["totalProofSets", "totalActiveProofSets", "totalProviders"], - [BigInt.fromI32(1), BigInt.fromI32(1), BigInt.fromI32(1)], - ["add", "add", "add"] - ); + network_totalProviders = BigInt.fromI32(1); } else { // Update timestamp/block even if exists provider.totalProofSets = provider.totalProofSets.plus(BigInt.fromI32(1)); provider.blockNumber = event.block.number; - - // update network metrics - saveNetworkMetrics( - ["totalProofSets", "totalActiveProofSets"], - [BigInt.fromI32(1), BigInt.fromI32(1)], - ["add", "add"] - ); } // provider.proofSetIds = provider.proofSetIds.concat([event.params.setId]); // REMOVED - Handled by @derivedFrom provider.updatedAt = event.block.timestamp; provider.save(); + // Store Service + let service = Service.load(listenerAddr); + if (service == null) { + service = new Service(listenerAddr); + service.address = listenerAddr; + service.totalProofSets = BigInt.fromI32(1); + service.totalProviders = BigInt.fromI32(1); + service.totalRoots = BigInt.fromI32(0); + service.totalDataSize = BigInt.fromI32(0); + service.totalFaultedPeriods = BigInt.fromI32(0); + service.totalFaultedRoots = BigInt.fromI32(0); + service.createdAt = event.block.timestamp; + + network_totalServices = BigInt.fromI32(1); + } else { + service.totalProofSets = service.totalProofSets.plus(BigInt.fromI32(1)); + } + service.updatedAt = event.block.timestamp; + + // Store ServiceProviderLink + let serviceProviderLink = ServiceProviderLink.load( + getServiceProviderLinkEntityId(listenerAddr, event.params.owner) + ); + if (serviceProviderLink == null) { + serviceProviderLink = new ServiceProviderLink( + getServiceProviderLinkEntityId(listenerAddr, event.params.owner) + ); + serviceProviderLink.totalProofSets = BigInt.fromI32(1); + serviceProviderLink.service = listenerAddr; + serviceProviderLink.provider = event.params.owner; + + // update service stats + service.totalProviders = service.totalProviders.plus(BigInt.fromI32(1)); + } else { + serviceProviderLink.totalProofSets = + serviceProviderLink.totalProofSets.plus(BigInt.fromI32(1)); + } + service.save(); + serviceProviderLink.save(); + + // update network metrics + saveNetworkMetrics( + [ + "totalProofSets", + "totalActiveProofSets", + "totalProviders", + "totalServices", + ], + [ + network_totalProofSets, + network_totalActiveProofSets, + network_totalProviders, + network_totalServices, + ], + ["add", "add", "add", "add"] + ); + // update provider and proof set metrics const weekId = event.block.timestamp.toI32() / 604800; const monthId = event.block.timestamp.toI32() / 2592000; @@ -341,6 +402,38 @@ export function handleProofSetOwnerChanged( ]); } + // load old ServiceProvider link - check if totalProofSets > 1 or not + // if not delete entity else decrease totalProofSets + const oldServiceProviderLink = ServiceProviderLink.load( + getServiceProviderLinkEntityId(proofSet.listener, oldOwner) + ); + if (oldServiceProviderLink) { + if (oldServiceProviderLink.totalProofSets.gt(BigInt.fromI32(1))) { + oldServiceProviderLink.totalProofSets = + oldServiceProviderLink.totalProofSets.minus(BigInt.fromI32(1)); + } else { + store.remove("ServiceProviderLink", oldServiceProviderLink.id.toString()); + } + oldServiceProviderLink.save(); + } + + // load new ServiceProvider link + let newServiceProviderLink = ServiceProviderLink.load( + getServiceProviderLinkEntityId(proofSet.listener, newOwner) + ); + if (newServiceProviderLink) { + newServiceProviderLink.totalProofSets = + newServiceProviderLink.totalProofSets.plus(BigInt.fromI32(1)); + } else { + newServiceProviderLink = new ServiceProviderLink( + getServiceProviderLinkEntityId(proofSet.listener, newOwner) + ); + newServiceProviderLink.totalProofSets = BigInt.fromI32(1); + newServiceProviderLink.service = proofSet.listener; + newServiceProviderLink.provider = newOwner; + } + newServiceProviderLink.save(); + // Load or Create New Provider - Just update timestamp/create, derived field handles addition let newProvider = Provider.load(newOwner); if (newProvider == null) { @@ -947,6 +1040,17 @@ export function handleRootsAdded(event: RootsAddedEvent): void { ]); } + // update Service stats + const service = Service.load(proofSet.listener); + if (service) { + service.totalRoots = service.totalRoots.plus( + BigInt.fromI32(addedRootCount) + ); + service.totalDataSize = service.totalDataSize.plus(totalDataSizeAdded); + service.updatedAt = event.block.number; + service.save(); + } + // Update network metrics saveNetworkMetrics( ["totalRoots", "totalActiveRoots", "totalDataSize"], @@ -1146,6 +1250,33 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { ]); } + // update Service stats + const service = Service.load(proofSet.listener); + if (service) { + service.totalRoots = service.totalRoots.minus( + BigInt.fromI32(removedRootCount) + ); + // ensure totalRoots doesn't go negative + if (service.totalRoots.lt(BigInt.fromI32(0))) { + log.warning( + "handleRootsRemoved: Service {} totalRoots went negative. Setting to 0.", + [proofSet.listener.toHex()] + ); + service.totalRoots = BigInt.fromI32(0); + } + service.totalDataSize = service.totalDataSize.minus(removedDataSize); + // ensure totalDataSize doesn't go negative + if (service.totalDataSize.lt(BigInt.fromI32(0))) { + log.warning( + "handleRootsRemoved: Service {} totalDataSize went negative. Setting to 0.", + [proofSet.listener.toHex()] + ); + service.totalDataSize = BigInt.fromI32(0); + } + service.updatedAt = event.block.number; + service.save(); + } + // Update network metrics saveNetworkMetrics( ["totalActiveRoots", "totalDataSize"], diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index 08acb81..f6013e5 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -19,6 +19,9 @@ dataSources: - ProofSet - Provider - Root + - SumTreeCount + - Service + - ServiceProviderLink - EventLog - Transaction - Proof @@ -61,6 +64,7 @@ dataSources: entities: - ProofSet - Root + - SumTreeCount - EventLog - FaultRecord abis: From 07821b96944fe86831c6030932c0ac18046e1ae8 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 6 Jun 2025 13:23:22 +0530 Subject: [PATCH 44/51] fix: service contract stats --- subgraph/src/pdp-verifier.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index 571e55a..0b1f90b 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -161,7 +161,7 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { service = new Service(listenerAddr); service.address = listenerAddr; service.totalProofSets = BigInt.fromI32(1); - service.totalProviders = BigInt.fromI32(1); + service.totalProviders = BigInt.fromI32(0); service.totalRoots = BigInt.fromI32(0); service.totalDataSize = BigInt.fromI32(0); service.totalFaultedPeriods = BigInt.fromI32(0); From f9e792f57236846fffac15d745aadb50247dacfd Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 6 Jun 2025 14:52:24 +0530 Subject: [PATCH 45/51] show pdp services --- .../components/Landing/NetworkStatsCard.tsx | 12 +- .../components/Providers/ProvidersTable.tsx | 9 +- .../src/components/Services/ServicesTable.tsx | 178 ++++++++++++++ .../src/components/shared/MetricItem.tsx | 9 + .../src/hooks/useValidatedDebounce.ts | 48 ++++ subgraph-client/src/pages/Landing.tsx | 86 +++++-- subgraph-client/src/pages/Providers.tsx | 38 +-- subgraph-client/src/pages/ServiceDetails.tsx | 226 ++++++++++++++++++ subgraph-client/src/pages/Services.tsx | 104 ++++++++ subgraph-client/src/router/routes.tsx | 15 ++ subgraph-client/src/utility/queries.ts | 87 +++++++ subgraph-client/src/utility/types.ts | 22 ++ 12 files changed, 790 insertions(+), 44 deletions(-) create mode 100644 subgraph-client/src/components/Services/ServicesTable.tsx create mode 100644 subgraph-client/src/components/shared/MetricItem.tsx create mode 100644 subgraph-client/src/hooks/useValidatedDebounce.ts create mode 100644 subgraph-client/src/pages/ServiceDetails.tsx create mode 100644 subgraph-client/src/pages/Services.tsx diff --git a/subgraph-client/src/components/Landing/NetworkStatsCard.tsx b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx index b121ee3..7b33440 100644 --- a/subgraph-client/src/components/Landing/NetworkStatsCard.tsx +++ b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx @@ -1,5 +1,6 @@ import React from 'react' import { NetworkMetrics } from '@/utility/types' +import { MetricItem } from '../shared/MetricItem' import { Skeleton } from '@/components/ui/skeleton' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { AlertTriangle } from 'lucide-react' @@ -82,17 +83,6 @@ export const NetworkStatsCard: React.FC = ({ ) } -// Reusable Metric Item -const MetricItem: React.FC<{ title: string; value: React.ReactNode }> = ({ - title, - value, -}) => ( -
-

{title}

-

{value ?? 'N/A'}

-
-) - // Skeleton for the stats card const NetworkStatsSkeleton: React.FC = () => (
diff --git a/subgraph-client/src/components/Providers/ProvidersTable.tsx b/subgraph-client/src/components/Providers/ProvidersTable.tsx index 42700cd..8bcfc3a 100644 --- a/subgraph-client/src/components/Providers/ProvidersTable.tsx +++ b/subgraph-client/src/components/Providers/ProvidersTable.tsx @@ -60,7 +60,10 @@ export const ProvidersTable: React.FC = ({ {providers.map((provider) => ( - + = ({ 0 + Number(provider.totalProofSets) > 0 ? 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200' : 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300' }`} > - {provider.proofSets?.length > 0 + {Number(provider.totalProofSets) > 0 ? 'Active Sets' : 'No Active Sets'} diff --git a/subgraph-client/src/components/Services/ServicesTable.tsx b/subgraph-client/src/components/Services/ServicesTable.tsx new file mode 100644 index 0000000..287ca7b --- /dev/null +++ b/subgraph-client/src/components/Services/ServicesTable.tsx @@ -0,0 +1,178 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { Service } from '@/utility/types' +import { Skeleton } from '@/components/ui/skeleton' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDataSize } from '@/utility/helper' +import { CopyableText } from '@/components/shared/CopyableText' +import { useNetwork } from '@/contexts/NetworkContext' + +interface ServicesTableProps { + services: Service[] + isLoading: boolean + error: any + searchQuery: string +} + +export const ServicesTable: React.FC = ({ + services, + isLoading, + error, + searchQuery, +}) => { + const { network } = useNetwork() + + if (isLoading) { + return + } + + if (error) { + return ( + + + Error Loading Services + + Could not load services list. Error:{' '} + {error.message || 'Unknown error'} + + + ) + } + + if (services.length === 0) { + return ( +
+ No services found{searchQuery ? ` matching "${searchQuery}"` : ''}. +
+ ) + } + + return ( +
+ + + + + + + + + + + + + {services.map((service) => ( + + + + + + + + + ))} + +
+ Address + + Proof Sets + + Providers + + Roots + + Data Size + + Faulted Roots +
+ + + + + {parseInt(service.totalProofSets).toLocaleString()} + + {parseInt(service.totalProviders).toLocaleString()} + + {parseInt(service.totalRoots).toLocaleString()} + + {formatDataSize(service.totalDataSize)} + + {parseInt(service.totalFaultedRoots).toLocaleString()} +
+
+ ) +} + +interface ServicesTableSkeletonProps { + itemsPerPage: number +} + +const ServicesTableSkeleton: React.FC = ({ + itemsPerPage, +}) => { + return ( +
+ + + + + + + + + + + + + {Array(itemsPerPage) + .fill(0) + .map((_, index) => ( + + + + + + + + + ))} + +
+ Address + + Proof Sets + + Providers + + Roots + + Data Size + + Faulted Roots +
+ + + + + + + + + + + +
+
+ ) +} diff --git a/subgraph-client/src/components/shared/MetricItem.tsx b/subgraph-client/src/components/shared/MetricItem.tsx new file mode 100644 index 0000000..e587b8b --- /dev/null +++ b/subgraph-client/src/components/shared/MetricItem.tsx @@ -0,0 +1,9 @@ +export const MetricItem: React.FC<{ + title: string + value: React.ReactNode +}> = ({ title, value }) => ( +
+

{title}

+

{value ?? 'N/A'}

+
+) diff --git a/subgraph-client/src/hooks/useValidatedDebounce.ts b/subgraph-client/src/hooks/useValidatedDebounce.ts new file mode 100644 index 0000000..2a96214 --- /dev/null +++ b/subgraph-client/src/hooks/useValidatedDebounce.ts @@ -0,0 +1,48 @@ +import { useState, useEffect } from 'react' +import { useDebounce } from './useDebounce' + +// Validate if the search input is a valid hex string +const isValidHex = (input: string): boolean => { + // Empty string is valid (no search) + if (!input) return true + // Check if it's a valid hex string (with or without 0x prefix) + const hexRegex = /^(0x)?[0-9a-fA-F]+$/ + return hexRegex.test(input) +} + +export function useValidatedDebounce(value: string, delay: number) { + const [searchError, setSearchError] = useState(null) + const debouncedSearch = useDebounce(value, delay) + + // Check if search is valid hex and has even length (after removing 0x prefix) + useEffect(() => { + if (!debouncedSearch) { + setSearchError(null) + return + } + + if (!isValidHex(debouncedSearch)) { + setSearchError('Please enter a valid hexadecimal address') + return + } + + const hex = debouncedSearch.startsWith('0x') + ? debouncedSearch.slice(2) + : debouncedSearch + if (hex.length % 2 !== 0) { + setSearchError('Address must have an even number of characters') + return + } + + setSearchError(null) + }, [debouncedSearch]) + + const validatedSearch = debouncedSearch && !searchError ? debouncedSearch : '' + + return { + searchError, + setSearchError, + debouncedSearch, + validatedSearch, + } +} diff --git a/subgraph-client/src/pages/Landing.tsx b/subgraph-client/src/pages/Landing.tsx index 16e0ab3..d9f790e 100644 --- a/subgraph-client/src/pages/Landing.tsx +++ b/subgraph-client/src/pages/Landing.tsx @@ -3,11 +3,13 @@ import { Link, useNavigate } from 'react-router-dom' import { Github, FileCode, - Search, Book, Calculator, Loader2, X, + Server, + Menu, + Search, } from 'lucide-react' import { search, SearchResult } from '@/api/apiService' import { formatDataSize } from '@/utility/helper' @@ -21,7 +23,6 @@ import { RecentProvidersTable } from '@/components/Landing/RecentProvidersTable' import { NetworkSelector } from '@/components/shared/NetworkSelector' import { useNetwork } from '@/contexts/NetworkContext' import { useToast } from '@/hooks/use-toast' -// import { ModeToggle } from '@/components/shared/ThemeToggle' const ITEMS_PER_PAGE = 10 // How many recent items to show @@ -31,6 +32,7 @@ export const Landing = () => { const [searchResults, setSearchResults] = useState([]) const [isSearching, setIsSearching] = useState(false) const [searchError, setSearchError] = useState(null) + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) const { subgraphUrl, network } = useNetwork() const { toast } = useToast() const inputRef = useRef(null) @@ -120,30 +122,49 @@ export const Landing = () => { return (
- {/* Adjusted header for title, network selector and theme toggle */} -
-
-
- + {/* Responsive header for title, navigation and network selector */} +
+
+
+
+ +
+

+ PDP Scan +

-

- PDP Scan -

+ {/* Mobile menu button */} +
-
+ + {/* Desktop Navigation */} +
+ + + PDP Services + - Docs + Docs - Gas Calculator + Gas Calculator { className="text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 text-sm font-medium transition-colors flex items-center" aria-label="GitHub Repository" > - GitHub + {' '} + GitHub {/* Network Selector */} {/* TODO: Fix colors to add this toggle ( default theme is light) */} {/* */}
+ + {/* Mobile Navigation */} + {mobileMenuOpen && ( +
+ + + Docs + + + + Services + + + + Gas Calculator + + + GitHub + +
+ )}
diff --git a/subgraph-client/src/pages/Providers.tsx b/subgraph-client/src/pages/Providers.tsx index 224bec4..c9de075 100644 --- a/subgraph-client/src/pages/Providers.tsx +++ b/subgraph-client/src/pages/Providers.tsx @@ -2,7 +2,7 @@ import { useEffect, useState } from 'react' import { Input } from '@/components/ui/input' import { Search } from 'lucide-react' import { Pagination } from '@/components/ui/pagination' -import { useDebounce } from '@/hooks/useDebounce' +import { useValidatedDebounce } from '@/hooks/useValidatedDebounce' import useGraphQL from '@/hooks/useGraphQL' import { providerQuery, networkMetricsQuery } from '@/utility/queries' import type { Provider, NetworkMetrics } from '@/utility/types' @@ -15,7 +15,10 @@ export const Providers = () => { const [searchQuery, setSearchQuery] = useState('') const [currentPage, setCurrentPage] = useState(1) - const debouncedSearch = useDebounce(searchQuery, 300) + const { validatedSearch, searchError } = useValidatedDebounce( + searchQuery, + 300 + ) const { data: metricsData, error: metricsError } = useGraphQL<{ networkMetric: NetworkMetrics @@ -34,8 +37,8 @@ export const Providers = () => { { first: ITEMS_PER_PAGE, skip: (currentPage - 1) * ITEMS_PER_PAGE, - where: debouncedSearch - ? { address_contains: normalizeBytesFilter(debouncedSearch) } + where: validatedSearch + ? { address_contains: normalizeBytesFilter(validatedSearch) } : {}, }, { @@ -54,23 +57,26 @@ export const Providers = () => { if (searchQuery) { setCurrentPage(1) } - }, [debouncedSearch]) // Effect depends on the debounced value + }, [validatedSearch]) // Effect depends on the debounced value return (

Storage Providers

-
- - setSearchQuery(e.target.value)} - className="pl-8" - /> -
+
+ + setSearchQuery(e.target.value)} + className={`pl-8 ${searchError ? 'border-red-500' : ''}`} + /> +
+ {searchError && ( +
{searchError}
+ )}
{/* Error from metrics query doesn't prevent showing potentially loaded providers */} {metricsError && ( @@ -82,7 +88,7 @@ export const Providers = () => { providers={providers} isLoading={providersLoading} error={providersError} - searchQuery={debouncedSearch} + searchQuery={searchQuery} />
{/* Pagination - Show if not searching or if search results exceed one page */} diff --git a/subgraph-client/src/pages/ServiceDetails.tsx b/subgraph-client/src/pages/ServiceDetails.tsx new file mode 100644 index 0000000..edd85f8 --- /dev/null +++ b/subgraph-client/src/pages/ServiceDetails.tsx @@ -0,0 +1,226 @@ +import { useState } from 'react' +import { useParams } from 'react-router-dom' +import { MetricItem } from '@/components/shared/MetricItem' +import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' +import { Pagination } from '@/components/ui/pagination' +import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' +import { AlertTriangle } from 'lucide-react' +import { formatDataSize } from '@/utility/helper' +import { Service, ProofSet, ProviderLink } from '@/utility/types' +import useGraphQL from '@/hooks/useGraphQL' +import { serviceDetailsQuery, serviceProvidersQuery } from '@/utility/queries' +import { CopyableText } from '@/components/shared/CopyableText' +import { ProofSetsTable } from '@/components/ProofSets/ProofSetsTable' +import { ProvidersTable } from '@/components/Providers/ProvidersTable' + +const ITEMS_PER_PAGE = 10 + +export const ServiceDetails = () => { + const { serviceId } = useParams<{ serviceId: string }>() + const [currentProofSetsPage, setCurrentProofSetsPage] = useState(1) + const [currentProvidersPage, setCurrentProvidersPage] = useState(1) + const [activeTab, setActiveTab] = useState('providers') + + // Define types for GraphQL responses + interface ServiceDetailsResponse { + service: Service & { + proofSets: ProofSet[] + } + } + + interface ServiceProvidersResponse { + service: Service & { + providerLinks: ProviderLink[] + } + } + + // Fetch service details and proof sets + const { + data: serviceData, + error: serviceError, + isLoading: serviceLoading, + } = useGraphQL( + serviceDetailsQuery, + { + serviceId, + first: ITEMS_PER_PAGE, + skip: (currentProofSetsPage - 1) * ITEMS_PER_PAGE, + }, + { + revalidateOnFocus: false, + errorRetryCount: 2, + keepPreviousData: true, + } + ) + + // Fetch service providers + const { + data: providersData, + error: providersError, + isLoading: providersLoading, + } = useGraphQL( + serviceProvidersQuery, + { + serviceId, + first: ITEMS_PER_PAGE, + skip: (currentProvidersPage - 1) * ITEMS_PER_PAGE, + }, + { + revalidateOnFocus: false, + errorRetryCount: 2, + keepPreviousData: true, + } + ) + + const service = serviceData?.service + const proofSets = service?.proofSets || [] + const providerLinks = providersData?.service?.providerLinks || [] + + // Transform providerLinks to providers format expected by ProvidersTable + const providers = providerLinks.map((link) => link.provider) + + // Calculate total pages + const totalProofSets = service?.totalProofSets + ? parseInt(service.totalProofSets) + : 0 + const totalProofSetsPages = Math.max( + 1, + Math.ceil(totalProofSets / ITEMS_PER_PAGE) + ) + + const totalProviders = service?.totalProviders + ? parseInt(service.totalProviders) + : 0 + const totalProvidersPages = Math.max( + 1, + Math.ceil(totalProviders / ITEMS_PER_PAGE) + ) + + if (serviceError) { + return ( + + + Error Loading Service + + Could not load service details. Error:{' '} + {serviceError.message || 'Unknown error'} + + + ) + } + + return ( +
+
+

Service Contract Details

+

+ +

+ + {/* Service Overview Card */} + + + Service Overview + + + {serviceLoading ? ( +
+
+
+
+
+ ) : ( +
+ + + + + + +
+ )} +
+
+ + {/* Tabs for Proof Sets and Providers */} + + + Providers + Proof Sets + + + +
+ +
+ + {totalProvidersPages > 1 && ( +
+ +
+ )} +
+ + +
+ +
+ + {totalProofSetsPages > 1 && ( +
+ +
+ )} +
+
+
+
+ ) +} + +export default ServiceDetails diff --git a/subgraph-client/src/pages/Services.tsx b/subgraph-client/src/pages/Services.tsx new file mode 100644 index 0000000..8cca093 --- /dev/null +++ b/subgraph-client/src/pages/Services.tsx @@ -0,0 +1,104 @@ +import { useState, useEffect } from 'react' +import { Input } from '@/components/ui/input' +import { Search } from 'lucide-react' +import { Pagination } from '@/components/ui/pagination' +import { useValidatedDebounce } from '@/hooks/useValidatedDebounce' +import useGraphQL from '@/hooks/useGraphQL' +import { servicesQuery } from '@/utility/queries' +import type { Service } from '@/utility/types' +import { ServicesTable } from '@/components/Services/ServicesTable' +import { normalizeBytesFilter } from '@/utility/helper' + +const ITEMS_PER_PAGE = 10 + +export const Services = () => { + const [currentPage, setCurrentPage] = useState(1) + const [searchQuery, setSearchQuery] = useState('') + const { debouncedSearch, validatedSearch, searchError } = + useValidatedDebounce(searchQuery, 300) + + const { + data: servicesData, + error: servicesError, + isLoading: servicesLoading, + } = useGraphQL<{ + services: Service[] + networkMetric: { totalServices: string } + }>( + servicesQuery, + { + first: ITEMS_PER_PAGE, + skip: (currentPage - 1) * ITEMS_PER_PAGE, + where: validatedSearch + ? { address_contains: normalizeBytesFilter(validatedSearch) } + : {}, + orderBy: 'totalProofSets', + }, + { + revalidateOnFocus: false, + errorRetryCount: 2, + keepPreviousData: true, + } + ) + + const services = servicesData?.services || [] + const totalServices = + services.length > 0 + ? parseInt(servicesData?.networkMetric?.totalServices || '0') + : 0 + const totalPages = Math.max(1, Math.ceil(totalServices / ITEMS_PER_PAGE)) + + // Reset page to 1 when search query changes + useEffect(() => { + if (searchQuery) { + setCurrentPage(1) + } + }, [validatedSearch]) + + return ( +
+
+

Service Contracts

+

+ Browse all service contracts in the PDP network +

+ + {/* Search bar */} +
+ + setSearchQuery(e.target.value)} + className={`pl-10 ${searchError ? 'border-red-500' : ''}`} + /> +
+ {searchError && ( +
{searchError}
+ )} + + {/* Services Table */} + + + {/* Pagination */} + {totalPages > 1 && ( +
+ +
+ )} +
+
+ ) +} + +export default Services diff --git a/subgraph-client/src/router/routes.tsx b/subgraph-client/src/router/routes.tsx index b6c4ca4..b7325bf 100644 --- a/subgraph-client/src/router/routes.tsx +++ b/subgraph-client/src/router/routes.tsx @@ -3,6 +3,8 @@ import { ProofSetDetails } from '@/pages/ProofSetDetails' import { ProofSets } from '@/pages/ProofSets' import { ProviderDetails } from '@/pages/ProviderDetails' import { Providers } from '@/pages/Providers' +import { Services } from '@/pages/Services' +import { ServiceDetails } from '@/pages/ServiceDetails' import { Documentation } from '@/pages/Documentation' import { GasCalculator } from '@/pages/GasCalculator' import { @@ -54,6 +56,11 @@ const AppRoutes = () => { path="/:network/proofsets/:proofSetId" element={} /> + } /> + } + /> {/* Network-agnostic routes */} } /> @@ -77,6 +84,14 @@ const AppRoutes = () => { path="/proofsets/:proofSetId" element={} /> + } + /> + } + /> {/* Catch-all route */} } /> diff --git a/subgraph-client/src/utility/queries.ts b/subgraph-client/src/utility/queries.ts index b0c6d0b..0febf31 100644 --- a/subgraph-client/src/utility/queries.ts +++ b/subgraph-client/src/utility/queries.ts @@ -230,6 +230,93 @@ query WeeklyProofSetActivities($where: WeeklyProofSetActivity_filter) { } }` +export const monthlyProofSetActivitiesQuery = ` +query MonthlyProofSetActivities($where: MonthlyProofSetActivity_filter) { + monthlyProofSetActivities(where: $where) { + id + proofSetId + totalDataSizeAdded + totalDataSizeRemoved + totalFaultedPeriods + totalFaultedRoots + totalProofs + totalRootsAdded + totalRootsProved + totalRootsRemoved + } +}` + +export const servicesQuery = ` +query Services($first: Int, $skip: Int, $where: Service_filter, $orderBy: Service_orderBy) { + services(first: $first, skip: $skip, where: $where, orderBy: $orderBy, orderDirection: desc) { + id + address + totalProofSets + totalProviders + totalRoots + totalDataSize + totalFaultedRoots + totalFaultedPeriods + createdAt + updatedAt + } + networkMetric(id: "0x7064705f6e6574776f726b5f7374617473") { + totalProofSets + } +}` + +export const serviceDetailsQuery = ` +query ServiceDetails($serviceId: ID!, $first: Int, $skip: Int) { + service(id: $serviceId) { + id + address + totalProofSets + totalProviders + totalRoots + totalDataSize + totalFaultedRoots + totalFaultedPeriods + createdAt + updatedAt + proofSets(first: $first, skip: $skip, orderBy: createdAt, orderDirection: desc) { + id + setId + isActive + totalRoots + totalProvedRoots + totalDataSize + lastProvenEpoch + nextChallengeEpoch + createdAt + owner { + address + } + } + } +}` + +export const serviceProvidersQuery = ` +query ServiceProviders($serviceId: ID!, $first: Int, $skip: Int) { + service(id: $serviceId) { + id + address + providerLinks(first: $first, skip: $skip) { + id + totalProofSets + provider { + id + address + totalProofSets + totalRoots + totalDataSize + totalFaultedRoots + totalFaultedPeriods + createdAt + } + } + } +}` + export const providerAndProofSetQuery = ` query ProviderAndProofSet($where_provider: Provider_filter, $where_proofset: ProofSet_filter, $where_root: Root_filter) { providers(where: $where_provider) { diff --git a/subgraph-client/src/utility/types.ts b/subgraph-client/src/utility/types.ts index e461374..c2dc75c 100644 --- a/subgraph-client/src/utility/types.ts +++ b/subgraph-client/src/utility/types.ts @@ -115,3 +115,25 @@ export interface WeeklyProofSetActivity extends Activity { export interface MonthlyProofSetActivity extends Activity { proofSetId: string } + +export interface ProviderLink { + id: string + totalProofSets: string + service: Service + provider: Provider +} + +export interface Service { + id: string + address: string + totalProofSets: string + totalProviders: string + totalRoots: string + totalDataSize: string + totalFaultedRoots: string + totalFaultedPeriods: string + createdAt: string + updatedAt: string + proofSets?: ProofSet[] + providerLinks?: ProviderLink[] +} From a7c03b37ffb6954809ff731c2d3495bdef59d3d6 Mon Sep 17 00:00:00 2001 From: silent-cipher Date: Fri, 6 Jun 2025 15:25:38 +0530 Subject: [PATCH 46/51] fix: proof set searching --- .../src/hooks/useValidatedNumberDebounce.ts | 39 +++++++++++++++ subgraph-client/src/pages/ProofSets.tsx | 47 +++++++++++-------- subgraph-client/src/pages/Services.tsx | 6 ++- 3 files changed, 71 insertions(+), 21 deletions(-) create mode 100644 subgraph-client/src/hooks/useValidatedNumberDebounce.ts diff --git a/subgraph-client/src/hooks/useValidatedNumberDebounce.ts b/subgraph-client/src/hooks/useValidatedNumberDebounce.ts new file mode 100644 index 0000000..9e6b164 --- /dev/null +++ b/subgraph-client/src/hooks/useValidatedNumberDebounce.ts @@ -0,0 +1,39 @@ +import { useState, useEffect } from 'react' +import { useDebounce } from './useDebounce' + +// Validate if the search input is a valid number (BigInt) +const isValidNumber = (input: string): boolean => { + // Empty string is valid (no search) + if (!input) return true + // Check if it's a valid number + return /^\d+$/.test(input) +} + +export function useValidatedNumberDebounce(value: string, delay: number) { + const [searchError, setSearchError] = useState(null) + const debouncedSearch = useDebounce(value, delay) + + // Check if search is a valid number + useEffect(() => { + if (!debouncedSearch) { + setSearchError(null) + return + } + + if (!isValidNumber(debouncedSearch)) { + setSearchError('Please enter a valid numeric ID') + return + } + + setSearchError(null) + }, [debouncedSearch]) + + const validatedSearch = debouncedSearch && !searchError ? debouncedSearch : '' + + return { + searchError, + setSearchError, + debouncedSearch, + validatedSearch, + } +} diff --git a/subgraph-client/src/pages/ProofSets.tsx b/subgraph-client/src/pages/ProofSets.tsx index a35b8f6..3b6471d 100644 --- a/subgraph-client/src/pages/ProofSets.tsx +++ b/subgraph-client/src/pages/ProofSets.tsx @@ -2,7 +2,7 @@ import { useState, useEffect } from 'react' import { Input } from '@/components/ui/input' import { Search } from 'lucide-react' import { Pagination } from '@/components/ui/pagination' -import { useDebounce } from '@/hooks/useDebounce' +import { useValidatedNumberDebounce } from '@/hooks/useValidatedNumberDebounce' import useGraphQL from '@/hooks/useGraphQL' import { networkMetricsQuery, landingProofSetsQuery } from '@/utility/queries' import type { ProofSet, NetworkMetrics } from '@/utility/types' @@ -13,7 +13,10 @@ const ITEMS_PER_PAGE = 10 export const ProofSets = () => { const [currentPage, setCurrentPage] = useState(1) const [searchQuery, setSearchQuery] = useState('') - const debouncedSearch = useDebounce(searchQuery, 300) + const { validatedSearch, searchError } = useValidatedNumberDebounce( + searchQuery, + 300 + ) const { data: metricsData, error: metricsError } = useGraphQL<{ networkMetric: NetworkMetrics }>(networkMetricsQuery, undefined, { revalidateOnFocus: false }) @@ -27,7 +30,7 @@ export const ProofSets = () => { { first: ITEMS_PER_PAGE, skip: (currentPage - 1) * ITEMS_PER_PAGE, - where: debouncedSearch ? { setId: debouncedSearch } : {}, + where: validatedSearch ? { setId: validatedSearch } : {}, orderBy: 'createdAt', orderDirection: 'desc', }, @@ -39,31 +42,37 @@ export const ProofSets = () => { ) const proofSets = proofSetsData?.proofSets || [] - const totalProofSets = - Number(metricsData?.networkMetric?.totalProofSets || 0) || 0 + const totalProofSets = parseInt( + metricsData?.networkMetric?.totalProofSets || '0' + ) + const totalPages = + Math.max(1, Math.ceil(totalProofSets / ITEMS_PER_PAGE)) || 0 // Reset page to 1 when search query changes useEffect(() => { if (searchQuery) { setCurrentPage(1) } - }, [debouncedSearch]) + }, [validatedSearch]) return (

Proof Sets

-
- - setSearchQuery(e.target.value)} - className="pl-8" - /> -
+
+ + setSearchQuery(e.target.value)} + className={`pl-8 ${searchError ? 'border-red-500' : ''}`} + /> +
+ {searchError && ( +
{searchError}
+ )}
{metricsError && (
@@ -74,13 +83,13 @@ export const ProofSets = () => { proofSets={proofSets} isLoading={proofSetsLoading} error={proofSetsError} - searchQuery={debouncedSearch} + searchQuery={validatedSearch} />
- {totalProofSets > ITEMS_PER_PAGE && !metricsError && ( + {!validatedSearch && totalPages > 1 && ( )} diff --git a/subgraph-client/src/pages/Services.tsx b/subgraph-client/src/pages/Services.tsx index 8cca093..1a03e75 100644 --- a/subgraph-client/src/pages/Services.tsx +++ b/subgraph-client/src/pages/Services.tsx @@ -14,8 +14,10 @@ const ITEMS_PER_PAGE = 10 export const Services = () => { const [currentPage, setCurrentPage] = useState(1) const [searchQuery, setSearchQuery] = useState('') - const { debouncedSearch, validatedSearch, searchError } = - useValidatedDebounce(searchQuery, 300) + const { validatedSearch, searchError } = useValidatedDebounce( + searchQuery, + 300 + ) const { data: servicesData, From 9e89b03227d79c68dc5719d8b44b0d0e505cc447 Mon Sep 17 00:00:00 2001 From: MaBarnabas Date: Tue, 17 Jun 2025 15:45:53 +0800 Subject: [PATCH 47/51] feat: UI consistency and navigation improvements maintained by storswift --- subgraph-client/src/components/go-back.tsx | 20 ++++ .../src/components/page-header.tsx | 110 +++++++++++++++++ subgraph-client/src/pages/Documentation.tsx | 13 +- subgraph-client/src/pages/GasCalculator.tsx | 4 + subgraph-client/src/pages/Landing.tsx | 112 +----------------- subgraph-client/src/pages/ProofSetDetails.tsx | 11 +- subgraph-client/src/pages/ProofSets.tsx | 4 +- subgraph-client/src/pages/ProviderDetails.tsx | 11 +- subgraph-client/src/pages/Providers.tsx | 4 +- subgraph-client/src/pages/ServiceDetails.tsx | 6 +- subgraph-client/src/pages/Services.tsx | 4 +- 11 files changed, 169 insertions(+), 130 deletions(-) create mode 100644 subgraph-client/src/components/go-back.tsx create mode 100644 subgraph-client/src/components/page-header.tsx diff --git a/subgraph-client/src/components/go-back.tsx b/subgraph-client/src/components/go-back.tsx new file mode 100644 index 0000000..ce165f4 --- /dev/null +++ b/subgraph-client/src/components/go-back.tsx @@ -0,0 +1,20 @@ + +import { Link, useNavigate } from "react-router-dom"; + + + +export default function GoBackLink() { + const navigate = useNavigate(); + + const handleClick = (e: React.MouseEvent) => { + e.preventDefault(); + if (window.history.length > 1) { + navigate(-1); + } else { + navigate("/"); + } + }; + return ( + ← Go Back + ) +} \ No newline at end of file diff --git a/subgraph-client/src/components/page-header.tsx b/subgraph-client/src/components/page-header.tsx new file mode 100644 index 0000000..512f2a4 --- /dev/null +++ b/subgraph-client/src/components/page-header.tsx @@ -0,0 +1,110 @@ +import { FileCode, Book, Calculator, Github, Menu, Server } from "lucide-react"; +import { Link, useNavigate } from "react-router-dom"; +import { NetworkSelector } from "./shared/NetworkSelector"; +import { useState } from "react"; +import { useNetwork } from "@/contexts/NetworkContext"; + +export default function PageHeader() { + const { network } = useNetwork() + const navigate = useNavigate() + const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + return ( +
+
+
navigate('/')} + > +
+ +
+

+ PDP Scan +

+
+ {/* Mobile menu button */} + +
+ + {/* Desktop Navigation */} +
+ + + PDP Services + + + + Docs + + + + Gas Calculator + + + {' '} + GitHub + + {/* Network Selector */} + + {/* TODO: Fix colors to add this toggle ( default theme is light) */} + {/* */} +
+ + {/* Mobile Navigation */} + {mobileMenuOpen && ( +
+ + + Docs + + + + Services + + + + Gas Calculator + + + GitHub + +
+ )} +
+ ) +} \ No newline at end of file diff --git a/subgraph-client/src/pages/Documentation.tsx b/subgraph-client/src/pages/Documentation.tsx index 7cac3a0..a11450c 100644 --- a/subgraph-client/src/pages/Documentation.tsx +++ b/subgraph-client/src/pages/Documentation.tsx @@ -5,7 +5,8 @@ import rehypeRaw from 'rehype-raw' import remarkGfm from 'remark-gfm' import slugify from 'slugify' import { useParams, Link, useNavigate } from 'react-router-dom' -import { ChevronRight, FileText, Book, ArrowLeft } from 'lucide-react' +import { ChevronRight, FileText, Book } from 'lucide-react' +import GoBackLink from '@/components/go-back' // Documentation structure const docs = [ @@ -85,16 +86,10 @@ export const Documentation = () => { }, [docId, navigate]) return ( -
+
{/* Back button */}
- - - Back to Home - +
diff --git a/subgraph-client/src/pages/GasCalculator.tsx b/subgraph-client/src/pages/GasCalculator.tsx index 5d4a7f9..7ffd7fa 100644 --- a/subgraph-client/src/pages/GasCalculator.tsx +++ b/subgraph-client/src/pages/GasCalculator.tsx @@ -7,6 +7,7 @@ import { SelectTrigger, SelectValue, } from '@/components/ui/select' +import GoBackLink from '@/components/go-back' interface GasMetrics { gasHigh: string @@ -125,6 +126,9 @@ export const GasCalculator = () => {
+
+ +

PDP Gas & Costs Calculator

diff --git a/subgraph-client/src/pages/Landing.tsx b/subgraph-client/src/pages/Landing.tsx index d9f790e..36c881d 100644 --- a/subgraph-client/src/pages/Landing.tsx +++ b/subgraph-client/src/pages/Landing.tsx @@ -2,14 +2,8 @@ import { useState, useRef } from 'react' import { Link, useNavigate } from 'react-router-dom' import { Github, - FileCode, - Book, - Calculator, - Loader2, - X, - Server, - Menu, - Search, + FileCode, Loader2, + X, Search } from 'lucide-react' import { search, SearchResult } from '@/api/apiService' import { formatDataSize } from '@/utility/helper' @@ -20,9 +14,9 @@ import type { NetworkMetrics, Provider, ProofSet } from '@/utility/types' import { NetworkStatsCard } from '@/components/Landing/NetworkStatsCard' import { RecentProofSetsTable } from '@/components/Landing/RecentProofSetsTable' import { RecentProvidersTable } from '@/components/Landing/RecentProvidersTable' -import { NetworkSelector } from '@/components/shared/NetworkSelector' import { useNetwork } from '@/contexts/NetworkContext' import { useToast } from '@/hooks/use-toast' +import PageHeader from '@/components/page-header' const ITEMS_PER_PAGE = 10 // How many recent items to show @@ -31,8 +25,7 @@ export const Landing = () => { const [searchQuery, setSearchQuery] = useState('') const [searchResults, setSearchResults] = useState([]) const [isSearching, setIsSearching] = useState(false) - const [searchError, setSearchError] = useState(null) - const [mobileMenuOpen, setMobileMenuOpen] = useState(false) + const [searchError, setSearchError] = useState(null) const { subgraphUrl, network } = useNetwork() const { toast } = useToast() const inputRef = useRef(null) @@ -123,102 +116,7 @@ export const Landing = () => {
{/* Responsive header for title, navigation and network selector */} -
-
-
-
- -
-

- PDP Scan -

-
- {/* Mobile menu button */} - -
- - {/* Desktop Navigation */} -
- - - PDP Services - - - - Docs - - - - Gas Calculator - - - {' '} - GitHub - - {/* Network Selector */} - - {/* TODO: Fix colors to add this toggle ( default theme is light) */} - {/* */} -
- - {/* Mobile Navigation */} - {mobileMenuOpen && ( -
- - - Docs - - - - Services - - - - Gas Calculator - - - GitHub - -
- )} -
- +
{ } return ( -
+
+
+ +
- - ← Back to Proof Sets - {/* Show title only if core proofSet data loaded, avoid showing before ID is confirmed valid */} {proofSet && (

diff --git a/subgraph-client/src/pages/ProofSets.tsx b/subgraph-client/src/pages/ProofSets.tsx index 3b6471d..d5e6fc7 100644 --- a/subgraph-client/src/pages/ProofSets.tsx +++ b/subgraph-client/src/pages/ProofSets.tsx @@ -7,6 +7,7 @@ import useGraphQL from '@/hooks/useGraphQL' import { networkMetricsQuery, landingProofSetsQuery } from '@/utility/queries' import type { ProofSet, NetworkMetrics } from '@/utility/types' import { ProofSetsTable } from '@/components/ProofSets/ProofSetsTable' +import PageHeader from '@/components/page-header' const ITEMS_PER_PAGE = 10 @@ -56,7 +57,8 @@ export const ProofSets = () => { }, [validatedSearch]) return ( -
+
+

Proof Sets

diff --git a/subgraph-client/src/pages/ProviderDetails.tsx b/subgraph-client/src/pages/ProviderDetails.tsx index 02b62da..590c5e1 100644 --- a/subgraph-client/src/pages/ProviderDetails.tsx +++ b/subgraph-client/src/pages/ProviderDetails.tsx @@ -1,9 +1,10 @@ import { useState } from 'react' -import { useParams, Link } from 'react-router-dom' +import { useParams } from 'react-router-dom' import { ProviderOverviewCard } from '@/components/ProviderDetails/ProviderOverviewCard' import { ProviderActivityChart } from '@/components/ProviderDetails/ProviderActivityChart' import { ProviderProofSetsTable } from '@/components/ProviderDetails/ProviderProofSetsTable' import useProviderPageData from '@/hooks/useProviderPageData' +import GoBackLink from '@/components/go-back' export const ProviderDetails = () => { const ITEMS_PER_PAGE = 10 @@ -28,11 +29,11 @@ export const ProviderDetails = () => { } return ( -
+
+
+ +
- - ← Back to Providers - {/* Show title only when details are loaded/loading, not on invalid ID state */} {providerId && isValidProviderId && (

diff --git a/subgraph-client/src/pages/Providers.tsx b/subgraph-client/src/pages/Providers.tsx index c9de075..610557f 100644 --- a/subgraph-client/src/pages/Providers.tsx +++ b/subgraph-client/src/pages/Providers.tsx @@ -8,6 +8,7 @@ import { providerQuery, networkMetricsQuery } from '@/utility/queries' import type { Provider, NetworkMetrics } from '@/utility/types' import { ProvidersTable } from '@/components/Providers/ProvidersTable' import { normalizeBytesFilter } from '@/utility/helper' +import PageHeader from '@/components/page-header' const ITEMS_PER_PAGE = 10 @@ -60,7 +61,8 @@ export const Providers = () => { }, [validatedSearch]) // Effect depends on the debounced value return ( -
+
+

Storage Providers

diff --git a/subgraph-client/src/pages/ServiceDetails.tsx b/subgraph-client/src/pages/ServiceDetails.tsx index edd85f8..3d6df8e 100644 --- a/subgraph-client/src/pages/ServiceDetails.tsx +++ b/subgraph-client/src/pages/ServiceDetails.tsx @@ -13,6 +13,7 @@ import { serviceDetailsQuery, serviceProvidersQuery } from '@/utility/queries' import { CopyableText } from '@/components/shared/CopyableText' import { ProofSetsTable } from '@/components/ProofSets/ProofSetsTable' import { ProvidersTable } from '@/components/Providers/ProvidersTable' +import GoBackLink from '@/components/go-back' const ITEMS_PER_PAGE = 10 @@ -112,7 +113,10 @@ export const ServiceDetails = () => { return (
-
+
+ +
+

Service Contract Details

diff --git a/subgraph-client/src/pages/Services.tsx b/subgraph-client/src/pages/Services.tsx index 1a03e75..bd1c89c 100644 --- a/subgraph-client/src/pages/Services.tsx +++ b/subgraph-client/src/pages/Services.tsx @@ -8,6 +8,7 @@ import { servicesQuery } from '@/utility/queries' import type { Service } from '@/utility/types' import { ServicesTable } from '@/components/Services/ServicesTable' import { normalizeBytesFilter } from '@/utility/helper' +import PageHeader from '@/components/page-header' const ITEMS_PER_PAGE = 10 @@ -58,7 +59,8 @@ export const Services = () => { }, [validatedSearch]) return ( -

+
+

Service Contracts

From 93176e270741206ea3aff985cc165815fd246f7f Mon Sep 17 00:00:00 2001 From: kaola526 Date: Fri, 1 Aug 2025 15:46:03 +0800 Subject: [PATCH 48/51] Renaming of data fields --- assets/pdp-explorer-mockups.excalidraw | 28 +++--- .../infrastructure/database/postgres.go | 4 +- .../infrastructure/database/proof_sets.go | 8 +- backend/indexer/internal/models/proof_set.go | 2 +- .../handlers/proof_set_created_handler.go | 2 +- .../handlers/roots_remove_handler.go | 2 +- .../internal/processor/handlers/types.go | 6 +- backend/server/internal/handlers/handlers.go | 8 +- .../server/internal/repository/repository.go | 70 +++++++------- backend/server/internal/service/service.go | 16 ++-- backend/server/openapi.yaml | 10 +- check_goldsky.sh | 71 ++++++++++++++ client/src/api/apiService.ts | 8 +- client/src/components/proof-heatmap.tsx | 6 +- client/src/pages/Landing.tsx | 12 +-- client/src/pages/ProofSetDetails.tsx | 18 ++-- client/src/pages/ProofSets.tsx | 12 +-- client/src/pages/ProviderDetails.tsx | 12 +-- client/src/pages/Providers.tsx | 4 +- docs/server/openapi.yaml | 30 +++--- docs/subgraph/graphql-api.md | 52 +++++----- .../public/docs/subgraph/graphql-api.md | 52 +++++----- subgraph-client/src/api/apiService.ts | 4 +- .../components/Landing/NetworkStatsCard.tsx | 6 +- .../Landing/RecentProofSetsTable.tsx | 12 +-- .../Landing/RecentProvidersTable.tsx | 4 +- .../ProofSetDetails/ProofSetActivityChart.tsx | 14 +-- .../ProofSetDetails/ProofSetOverview.tsx | 8 +- .../components/ProofSetDetails/RootsTable.tsx | 4 +- .../components/ProofSets/ProofSetsTable.tsx | 12 +-- .../ProviderDetails/ProviderActivityChart.tsx | 12 +-- .../ProviderDetails/ProviderOverviewCard.tsx | 6 +- .../ProviderProofSetsTable.tsx | 12 +-- .../components/Providers/ProvidersTable.tsx | 4 +- .../src/components/Services/ServicesTable.tsx | 12 +-- .../src/components/page-header.tsx | 4 +- .../src/hooks/useProofSetDetails.tsx | 6 +- subgraph-client/src/pages/GasCalculator.tsx | 6 +- subgraph-client/src/pages/Landing.tsx | 14 +-- subgraph-client/src/pages/ProofSetDetails.tsx | 4 +- subgraph-client/src/pages/ProofSets.tsx | 8 +- subgraph-client/src/pages/ServiceDetails.tsx | 14 +-- subgraph-client/src/utility/queries.ts | 4 +- subgraph-client/src/utility/types.ts | 8 +- subgraph/schema.graphql | 20 ++-- subgraph/src/pdp-service.ts | 12 +-- subgraph/src/pdp-verifier.ts | 94 +++++++++---------- subgraph/subgraph.yaml | 16 ++-- subgraph/tests/pdp-verifier.test.ts | 18 ++-- subgraph/utils/index.ts | 2 +- 50 files changed, 422 insertions(+), 351 deletions(-) create mode 100644 check_goldsky.sh diff --git a/assets/pdp-explorer-mockups.excalidraw b/assets/pdp-explorer-mockups.excalidraw index f25fd0b..1018c3f 100644 --- a/assets/pdp-explorer-mockups.excalidraw +++ b/assets/pdp-explorer-mockups.excalidraw @@ -268,13 +268,13 @@ "updated": 1733889770087, "link": null, "locked": false, - "text": "Search for a ProofSet/Owner 🔍 ", + "text": "Search for a DataSet/Owner 🔍 ", "fontSize": 16, "fontFamily": 5, "textAlign": "center", "verticalAlign": "top", "containerId": null, - "originalText": "Search for a ProofSet/Owner 🔍 ", + "originalText": "Search for a DataSet/Owner 🔍 ", "autoResize": true, "lineHeight": 1.25 }, @@ -1883,13 +1883,13 @@ "updated": 1733892069758, "link": null, "locked": false, - "text": "ProofSet#", + "text": "DataSet#", "fontSize": 16, "fontFamily": 5, "textAlign": "center", "verticalAlign": "top", "containerId": null, - "originalText": "ProofSet#", + "originalText": "DataSet#", "autoResize": true, "lineHeight": 1.25 }, @@ -2586,13 +2586,13 @@ "updated": 1733892286732, "link": null, "locked": false, - "text": "ProofSet\nSize", + "text": "DataSet\nSize", "fontSize": 16, "fontFamily": 5, "textAlign": "center", "verticalAlign": "top", "containerId": null, - "originalText": "ProofSet\nSize", + "originalText": "DataSet\nSize", "autoResize": true, "lineHeight": 1.25 }, @@ -3060,13 +3060,13 @@ "updated": 1733893406824, "link": null, "locked": false, - "text": "ProofSet #ID Overview", + "text": "DataSet #ID Overview", "fontSize": 19.200000000000003, "fontFamily": 5, "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "ProofSet #ID Overview", + "originalText": "DataSet #ID Overview", "autoResize": true, "lineHeight": 1.25 }, @@ -3173,13 +3173,13 @@ "updated": 1733896128383, "link": null, "locked": false, - "text": "ProofSet Change", + "text": "DataSet Change", "fontSize": 16, "fontFamily": 5, "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "ProofSet Change", + "originalText": "DataSet Change", "autoResize": true, "lineHeight": 1.25 }, @@ -6572,13 +6572,13 @@ "updated": 1733896159564, "link": null, "locked": false, - "text": "# of active proof sets\n# of all proof sets (including deleted ones)\n# of total data size stored\n# of total pieces stored\n# of faults\nFirst Seen\nLast Seen\n\n", + "text": "# of active proof sets\n# of all proof sets (including deleted ones)\n# of total data size stored\n# of total Pieces stored\n# of faults\nFirst Seen\nLast Seen\n\n", "fontSize": 16, "fontFamily": 5, "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "# of active proof sets\n# of all proof sets (including deleted ones)\n# of total data size stored\n# of total pieces stored\n# of faults\nFirst Seen\nLast Seen\n\n", + "originalText": "# of active proof sets\n# of all proof sets (including deleted ones)\n# of total data size stored\n# of total Pieces stored\n# of faults\nFirst Seen\nLast Seen\n\n", "autoResize": true, "lineHeight": 1.25 }, @@ -7914,13 +7914,13 @@ "updated": 1733896243335, "link": null, "locked": false, - "text": "ProofSet\nSize", + "text": "DataSet\nSize", "fontSize": 16, "fontFamily": 5, "textAlign": "center", "verticalAlign": "top", "containerId": null, - "originalText": "ProofSet\nSize", + "originalText": "DataSet\nSize", "autoResize": true, "lineHeight": 1.25 }, diff --git a/backend/indexer/internal/infrastructure/database/postgres.go b/backend/indexer/internal/infrastructure/database/postgres.go index 000ad18..863bb7f 100644 --- a/backend/indexer/internal/infrastructure/database/postgres.go +++ b/backend/indexer/internal/infrastructure/database/postgres.go @@ -87,7 +87,7 @@ func (p *PostgresDB) DeleteReorgedData(ctx context.Context, startHeight, endHeig return fmt.Errorf("failed to delete reorged fault records: %w", err) } - // Roots + // Pieces if err := p.DeleteReorgedRoots(ctx, startHeight, endHeight); err != nil { return fmt.Errorf("failed to delete reorged roots: %w", err) } @@ -131,6 +131,6 @@ func (p *PostgresDB) CleanupFinalizedData(ctx context.Context, currentBlockNumbe if err := p.CleanupFinalizedRoots(ctx, currentBlockNumber); err != nil { return fmt.Errorf("failed to cleanup finalized roots: %w", err) } - + return nil } diff --git a/backend/indexer/internal/infrastructure/database/proof_sets.go b/backend/indexer/internal/infrastructure/database/proof_sets.go index aedf240..0b65033 100644 --- a/backend/indexer/internal/infrastructure/database/proof_sets.go +++ b/backend/indexer/internal/infrastructure/database/proof_sets.go @@ -9,7 +9,7 @@ import ( ) // StoreProofSet stores a proof set record with version control -func (p *PostgresDB) StoreProofSet(ctx context.Context, proofSet *models.ProofSet) error { +func (p *PostgresDB) StoreProofSet(ctx context.Context, proofSet *models.DataSet) error { _, err := p.pool.Exec(ctx, ` INSERT INTO proof_sets ( set_id, owner, listener_addr, total_faulted_periods, total_data_size, @@ -44,7 +44,7 @@ func (p *PostgresDB) StoreProofSet(ctx context.Context, proofSet *models.ProofSe } // FindProofSet finds a proof set by its set_id, optionally including historical versions -func (p *PostgresDB) FindProofSet(ctx context.Context, setId int64, includeHistory bool) ([]*models.ProofSet, error) { +func (p *PostgresDB) FindProofSet(ctx context.Context, setId int64, includeHistory bool) ([]*models.DataSet, error) { query := ` SELECT id, set_id, owner, listener_addr, total_faulted_periods, total_proved_roots, total_data_size, total_roots, total_fee_paid, last_proven_epoch, next_challenge_epoch, challenge_range, @@ -63,9 +63,9 @@ func (p *PostgresDB) FindProofSet(ctx context.Context, setId int64, includeHisto } defer rows.Close() - var proofSets []*models.ProofSet + var proofSets []*models.DataSet for rows.Next() { - ps := &models.ProofSet{} + ps := &models.DataSet{} var totalFeePaidStr string var totalDataSizeStr string diff --git a/backend/indexer/internal/models/proof_set.go b/backend/indexer/internal/models/proof_set.go index 0923e4f..ea3799a 100644 --- a/backend/indexer/internal/models/proof_set.go +++ b/backend/indexer/internal/models/proof_set.go @@ -5,7 +5,7 @@ import ( "time" ) -type ProofSet struct { +type DataSet struct { ReorgModel // Embed ReorgModel to inherit base fields and methods SetId int64 `db:"set_id" json:"set_id"` Owner string `db:"owner" json:"owner"` diff --git a/backend/indexer/internal/processor/handlers/proof_set_created_handler.go b/backend/indexer/internal/processor/handlers/proof_set_created_handler.go index 7c20551..c7fdd65 100644 --- a/backend/indexer/internal/processor/handlers/proof_set_created_handler.go +++ b/backend/indexer/internal/processor/handlers/proof_set_created_handler.go @@ -134,7 +134,7 @@ func (h *ProofSetCreatedHandler) HandleEvent(ctx context.Context, eventLog *type } // Create new proof set - proofSet := &models.ProofSet{ + proofSet := &models.DataSet{ ReorgModel: models.ReorgModel{ BlockNumber: blockNumber, BlockHash: eventLog.BlockHash, diff --git a/backend/indexer/internal/processor/handlers/roots_remove_handler.go b/backend/indexer/internal/processor/handlers/roots_remove_handler.go index b1684d8..91451a2 100644 --- a/backend/indexer/internal/processor/handlers/roots_remove_handler.go +++ b/backend/indexer/internal/processor/handlers/roots_remove_handler.go @@ -100,7 +100,7 @@ func (h *RootsRemovedHandler) HandleEvent(ctx context.Context, eventLog *types.L // First get the root to get its raw_size root, err := h.db.FindRoot(ctx, setId.Int64(), rootIdInt) if err != nil { - return fmt.Errorf("[Roots Removed] failed to find root: %w", err) + return fmt.Errorf("[Pieces Removed] failed to find root: %w", err) } if root != nil { diff --git a/backend/indexer/internal/processor/handlers/types.go b/backend/indexer/internal/processor/handlers/types.go index 1de7293..e2e61e9 100644 --- a/backend/indexer/internal/processor/handlers/types.go +++ b/backend/indexer/internal/processor/handlers/types.go @@ -13,9 +13,9 @@ type Database interface { StoreProvider(ctx context.Context, provider *models.Provider) error FindProvider(ctx context.Context, address string, includeHistory bool) ([]*models.Provider, error) - // ProofSet methods - StoreProofSet(ctx context.Context, proofSet *models.ProofSet) error - FindProofSet(ctx context.Context, setId int64, includeHistory bool) ([]*models.ProofSet, error) + // DataSet methods + StoreProofSet(ctx context.Context, proofSet *models.DataSet) error + FindProofSet(ctx context.Context, setId int64, includeHistory bool) ([]*models.DataSet, error) // ProofFee methods StoreProofFee(ctx context.Context, proofFee *models.ProofFee) error diff --git a/backend/server/internal/handlers/handlers.go b/backend/server/internal/handlers/handlers.go index e758c4a..692cf9f 100644 --- a/backend/server/internal/handlers/handlers.go +++ b/backend/server/internal/handlers/handlers.go @@ -17,12 +17,12 @@ type Handler struct { type Service interface { GetProviders(offset, limit int) ([]Provider, int, error) GetProviderDetails(providerID string) (*ProviderDetails, error) - GetProofSets(sortBy string, order string, offset, limit int) ([]ProofSet, int, error) + GetProofSets(sortBy string, order string, offset, limit int) ([]DataSet, int, error) GetProofSetDetails(proofSetID string) (*ProofSetDetails, error) GetProofSetHeatmap(proofSetID string) ([]HeatmapEntry, error) GetNetworkMetrics(ctx context.Context) (map[string]interface{}, error) Search(ctx context.Context, query string, limit int) ([]map[string]interface{}, error) - GetProviderProofSets(providerID string, offset, limit int) ([]ProofSet, int, error) + GetProviderProofSets(providerID string, offset, limit int) ([]DataSet, int, error) GetProviderActivities(providerID string, activityType string) ([]Activity, error) GetProofSetEventLogs(proofSetID string, filter string, offset, limit int) ([]EventLog, int, error) GetProofSetTxs(proofSetID string, filter string, offset, limit int) ([]Transaction, int, error) @@ -45,7 +45,7 @@ type Provider struct { LastSeen time.Time `json:"lastSeen"` } -type ProofSet struct { +type DataSet struct { ID int64 `json:"id"` SetID int64 `json:"setId"` Owner string `json:"owner"` @@ -77,7 +77,7 @@ type ProviderDetails struct { NumRoots int64 `json:"numRoots"` FirstSeen time.Time `json:"firstSeen"` LastSeen time.Time `json:"lastSeen"` - ProofSets []ProofSet `json:"proofSets"` + ProofSets []DataSet `json:"proofSets"` } type ProofSetDetails struct { diff --git a/backend/server/internal/repository/repository.go b/backend/server/internal/repository/repository.go index b331c3e..de7c48e 100644 --- a/backend/server/internal/repository/repository.go +++ b/backend/server/internal/repository/repository.go @@ -28,7 +28,7 @@ type Provider struct { LastSeen time.Time // Computed field } -type ProofSet struct { +type DataSet struct { SetID int64 `db:"set_id"` Owner string `db:"owner"` ListenerAddr string `db:"listener_addr"` @@ -84,18 +84,18 @@ type EventLog struct { } type Root struct { - SetId int64 `db:"set_id"` - RootId int64 `db:"root_id"` - RawSize int64 `db:"raw_size"` - Cid string `db:"cid"` - Removed bool `db:"removed"` - TotalPeriodsFaulted int64 `db:"total_periods_faulted"` - TotalProofsSubmitted int64 `db:"total_proofs_submitted"` - LastProvenEpoch int64 `db:"last_proven_epoch"` - LastProvenAt *time.Time `db:"last_proven_at"` - LastFaultedEpoch int64 `db:"last_faulted_epoch"` - LastFaultedAt *time.Time `db:"last_faulted_at"` - CreatedAt time.Time `db:"created_at"` + SetId int64 `db:"set_id"` + RootId int64 `db:"root_id"` + RawSize int64 `db:"raw_size"` + Cid string `db:"cid"` + Removed bool `db:"removed"` + TotalPeriodsFaulted int64 `db:"total_periods_faulted"` + TotalProofsSubmitted int64 `db:"total_proofs_submitted"` + LastProvenEpoch int64 `db:"last_proven_epoch"` + LastProvenAt *time.Time `db:"last_proven_at"` + LastFaultedEpoch int64 `db:"last_faulted_epoch"` + LastFaultedAt *time.Time `db:"last_faulted_at"` + CreatedAt time.Time `db:"created_at"` } func NewRepository(db *pgxpool.Pool) *Repository { @@ -203,7 +203,7 @@ func (r *Repository) GetProviders(ctx context.Context, offset, limit int) ([]Pro return providers, total, nil } -func (r *Repository) GetProviderDetails(ctx context.Context, providerID string) (*Provider, []ProofSet, error) { +func (r *Repository) GetProviderDetails(ctx context.Context, providerID string) (*Provider, []DataSet, error) { var provider Provider err := r.db.QueryRow(ctx, ` WITH latest_provider AS ( @@ -314,9 +314,9 @@ func (r *Repository) GetProviderDetails(ctx context.Context, providerID string) } defer rows.Close() - var proofSets []ProofSet + var proofSets []DataSet for rows.Next() { - var ps ProofSet + var ps DataSet err := rows.Scan( &ps.SetID, &ps.Owner, @@ -343,7 +343,7 @@ func (r *Repository) GetProviderDetails(ctx context.Context, providerID string) return &provider, proofSets, nil } -func (r *Repository) GetProofSets(ctx context.Context, sortBy, order string, offset, limit int) ([]ProofSet, int, error) { +func (r *Repository) GetProofSets(ctx context.Context, sortBy, order string, offset, limit int) ([]DataSet, int, error) { var total int err := r.db.QueryRow(ctx, ` SELECT COUNT(DISTINCT set_id) FROM proof_sets WHERE is_active = true @@ -414,9 +414,9 @@ func (r *Repository) GetProofSets(ctx context.Context, sortBy, order string, off } defer rows.Close() - var proofSets []ProofSet + var proofSets []DataSet for rows.Next() { - var ps ProofSet + var ps DataSet err := rows.Scan( &ps.SetID, &ps.Owner, @@ -443,8 +443,8 @@ func (r *Repository) GetProofSets(ctx context.Context, sortBy, order string, off return proofSets, total, nil } -func (r *Repository) GetProofSetDetails(ctx context.Context, proofSetID string) (*ProofSet, error) { - var ps ProofSet +func (r *Repository) GetProofSetDetails(ctx context.Context, proofSetID string) (*DataSet, error) { + var ps DataSet err := r.db.QueryRow(ctx, ` WITH latest_block AS ( SELECT MAX(block_number) as max_block_number @@ -597,7 +597,7 @@ func (r *Repository) GetNetworkMetrics(ctx context.Context) (map[string]interfac metrics["totalDataSize"] = totalDataSize var totalPieces int - // Total data pieces + // Total data Pieces err = r.db.QueryRow(ctx, ` SELECT COALESCE(SUM(total_roots), 0) FROM ( @@ -608,7 +608,7 @@ func (r *Repository) GetNetworkMetrics(ctx context.Context) (map[string]interfac ) unique_proof_sets `).Scan(&totalPieces) if err != nil { - return nil, fmt.Errorf("failed to get total pieces: %w", err) + return nil, fmt.Errorf("failed to get total Pieces: %w", err) } metrics["totalPieces"] = totalPieces @@ -743,7 +743,7 @@ func (r *Repository) Search(ctx context.Context, query string) ([]map[string]int return results, nil } -func (r *Repository) GetProviderProofSets(ctx context.Context, providerID string, offset, limit int) ([]ProofSet, int, error) { +func (r *Repository) GetProviderProofSets(ctx context.Context, providerID string, offset, limit int) ([]DataSet, int, error) { var total int err := r.db.QueryRow(ctx, ` SELECT COUNT(DISTINCT set_id) @@ -792,9 +792,9 @@ func (r *Repository) GetProviderProofSets(ctx context.Context, providerID string } defer rows.Close() - var proofSets []ProofSet + var proofSets []DataSet for rows.Next() { - var ps ProofSet + var ps DataSet err := rows.Scan( &ps.SetID, &ps.Owner, @@ -954,7 +954,7 @@ func (r *Repository) GetProofSetEventLogs(ctx context.Context, proofSetID string query += ` ORDER BY created_at DESC LIMIT $2 OFFSET $3 - `; + ` rows, err := r.db.Query(ctx, query, proofSetID, limit, offset) if err != nil { @@ -1029,7 +1029,7 @@ func (r *Repository) GetProofSetTxs(ctx context.Context, proofSetID string, filt query += ` ORDER BY created_at DESC LIMIT $2 OFFSET $3 - `; + ` rows, err := r.db.Query(ctx, query, proofSetID, limit, offset) if err != nil { @@ -1101,13 +1101,13 @@ func (r *Repository) GetProofSetRoots(ctx context.Context, proofSetID string, or last_faulted_at, created_at FROM LatestRoots - `; - if orderBy != "" { - query += fmt.Sprintf(" ORDER BY %s %s", orderBy, order) - } - query += ` + ` + if orderBy != "" { + query += fmt.Sprintf(" ORDER BY %s %s", orderBy, order) + } + query += ` LIMIT $2 OFFSET $3 - `; + ` // Get roots rows, err := r.db.Query(ctx, query, proofSetID, limit, offset) if err != nil { @@ -1138,4 +1138,4 @@ func (r *Repository) GetProofSetRoots(ctx context.Context, proofSetID string, or } return roots, total, nil -} \ No newline at end of file +} diff --git a/backend/server/internal/service/service.go b/backend/server/internal/service/service.go index 7da8803..460be1a 100644 --- a/backend/server/internal/service/service.go +++ b/backend/server/internal/service/service.go @@ -50,9 +50,9 @@ func (s *Service) GetProviderDetails(providerID string) (*handlers.ProviderDetai return nil, fmt.Errorf("failed to get provider details: %w", err) } - mappedProofSets := make([]handlers.ProofSet, len(proofSets)) + mappedProofSets := make([]handlers.DataSet, len(proofSets)) for i, ps := range proofSets { - mappedProofSets[i] = handlers.ProofSet{ + mappedProofSets[i] = handlers.DataSet{ SetID: ps.SetID, Owner: ps.Owner, ListenerAddr: ps.ListenerAddr, @@ -88,15 +88,15 @@ func (s *Service) GetProviderDetails(providerID string) (*handlers.ProviderDetai }, nil } -func (s *Service) GetProofSets(sortBy, order string, offset, limit int) ([]handlers.ProofSet, int, error) { +func (s *Service) GetProofSets(sortBy, order string, offset, limit int) ([]handlers.DataSet, int, error) { proofSets, total, err := s.repo.GetProofSets(context.Background(), sortBy, order, offset, limit) if err != nil { return nil, 0, fmt.Errorf("failed to get proof sets: %w", err) } - result := make([]handlers.ProofSet, len(proofSets)) + result := make([]handlers.DataSet, len(proofSets)) for i, ps := range proofSets { - result[i] = handlers.ProofSet{ + result[i] = handlers.DataSet{ SetID: ps.SetID, Owner: ps.Owner, ListenerAddr: ps.ListenerAddr, @@ -169,15 +169,15 @@ func (s *Service) Search(ctx context.Context, query string, limit int) ([]map[st return s.repo.Search(ctx, query) } -func (s *Service) GetProviderProofSets(providerID string, offset, limit int) ([]handlers.ProofSet, int, error) { +func (s *Service) GetProviderProofSets(providerID string, offset, limit int) ([]handlers.DataSet, int, error) { proofSets, total, err := s.repo.GetProviderProofSets(context.Background(), providerID, offset, limit) if err != nil { return nil, 0, fmt.Errorf("failed to get provider proof sets: %w", err) } - result := make([]handlers.ProofSet, len(proofSets)) + result := make([]handlers.DataSet, len(proofSets)) for i, ps := range proofSets { - result[i] = handlers.ProofSet{ + result[i] = handlers.DataSet{ SetID: ps.SetID, Owner: ps.Owner, ListenerAddr: ps.ListenerAddr, diff --git a/backend/server/openapi.yaml b/backend/server/openapi.yaml index 2257f65..70b669d 100644 --- a/backend/server/openapi.yaml +++ b/backend/server/openapi.yaml @@ -73,7 +73,7 @@ paths: /proofsets: get: - summary: Get list of all Proof Sets + summary: Get list of all Data Sets description: Retrieve a list of the top 5 proof sets, sorted by a specified metric such as number of proofs submitted or data size. parameters: - name: sortBy @@ -190,7 +190,7 @@ paths: description: Total data size stored (in bytes) totalPiecesStored: type: integer - description: Total number of pieces stored + description: Total number of Pieces stored faults: type: integer description: Number of faults @@ -228,7 +228,7 @@ paths: /proofsets/{proofSetId}: get: - summary: Get ProofSet Details + summary: Get DataSet Details description: Retrieve detailed information about a specific proof set. parameters: - name: proofSetId @@ -254,7 +254,7 @@ paths: default: all responses: "200": - description: ProofSet details + description: DataSet details content: application/json: schema: @@ -305,7 +305,7 @@ paths: /proofsets/{proofSetId}/heatmap: get: - summary: Get ProofSet 7-Day Heatmap + summary: Get DataSet 7-Day Heatmap description: Retrieve a 7-day heatmap showing proof submissions and faults for a proof set. parameters: - name: proofSetId diff --git a/check_goldsky.sh b/check_goldsky.sh new file mode 100644 index 0000000..05a885f --- /dev/null +++ b/check_goldsky.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +PORT=35681 +STATUS_FILE="/tmp/subgraph_status.txt" +echo "Initializing..." > "$STATUS_FILE" + +# 登录 +echo "准备登录 Goldsky..." +goldsky login || { echo "登录失败"; exit 1; } +echo -e "\n登录成功,开始监控子图状态...\n" + +# HTTP服务函数 +start_http_service() { + PIPE="/tmp/subgraph_http_pipe" + rm -f "$PIPE"; mkfifo "$PIPE" + + while true; do + { + # 读取请求头 + while read -r line; do [[ "$line" == $'\r' || -z "$line" ]] && break; done + + # 读取最新状态(移除换行符) + current_status=$(tr -d '\n' < "$STATUS_FILE") + + # 生成JSON响应 + echo -e "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nConnection: close\r\n\r\n" + echo "{" + echo " \"timestamp\": \"$(date '+%Y-%m-%d %H:%M:%S')\"," + echo " \"status\": \"${current_status//\"/\\\"}\"" # 转义双引号 + echo "}" + } < "$PIPE" | nc -l $PORT > "$PIPE" + done +} + +# 启动HTTP服务 +start_http_service & +HTTP_PID=$! +trap 'kill $HTTP_PID; rm -f "$PIPE" "$STATUS_FILE"; exit' INT TERM + +# 主监控循环 +while true; do + # 获取并处理状态(生成单行输出) + new_status=$(goldsky subgraph list 2>&1 | awk ' + BEGIN { RS = "\\* "; FS = "\n"; output = "" } + /^[^ ]/ { + subgraph_name = substr($1, 14) + for (i=2; i<=NF; i++) { + if ($i ~ /Status:/) { + split($i, parts, ": ") + status = parts[2] + gsub(/[ \t$$]+/, " ", status) + sub("^ +| +$", "", status) + + # 构建字符串输出 + output = output "Subgraph: " subgraph_name " - Status: " status "; " + break + } + } + } + END { print output }') + + # 更新状态文件(确保无换行) + if [ -n "$new_status" ]; then + echo "$new_status" > "$STATUS_FILE" + else + echo "No status available" > "$STATUS_FILE" + fi + + echo "[$(date '+%H:%M:%S')] 当前状态: $(cat "$STATUS_FILE")" + sleep 60 +done \ No newline at end of file diff --git a/client/src/api/apiService.ts b/client/src/api/apiService.ts index 3e16396..d142b14 100644 --- a/client/src/api/apiService.ts +++ b/client/src/api/apiService.ts @@ -16,7 +16,7 @@ export interface Provider { } export interface ProviderDetailsResponse extends Provider { - proofSets: ProofSet[] + proofSets: DataSet[] } export interface Activity { @@ -27,7 +27,7 @@ export interface Activity { value: number } -export interface ProofSet { +export interface DataSet { setId: number owner: string listenerAddr: string @@ -83,7 +83,7 @@ export interface EventLog { createdAt: string } -export interface Roots { +export interface Pieces { rootId: number cid: string size: number @@ -141,7 +141,7 @@ export const getProviderProofSets = async ( return response.data } -// ProofSet-related API calls +// DataSet-related API calls export async function getProofSets( sortBy: string = 'proofsSubmitted', order: string = 'desc', diff --git a/client/src/components/proof-heatmap.tsx b/client/src/components/proof-heatmap.tsx index e0fd387..c569e5f 100644 --- a/client/src/components/proof-heatmap.tsx +++ b/client/src/components/proof-heatmap.tsx @@ -4,12 +4,12 @@ import { TooltipProvider, TooltipTrigger, } from '@/components/ui/tooltip' -import { Roots } from '@/api/apiService' +import { Pieces } from '@/api/apiService' import { formatDate } from '@/utility/helper' import { useMemo } from 'react' -const ProofHeatMap = ({ roots }: { roots: Roots[] }) => { - const calculateRootHealthScore = (root: Roots) => { +const ProofHeatMap = ({ roots }: { roots: Pieces[] }) => { + const calculateRootHealthScore = (root: Pieces) => { const totalProofs = root.totalProofsSubmitted || 0 const totalFaults = root.totalPeriodsFaulted || 0 diff --git a/client/src/pages/Landing.tsx b/client/src/pages/Landing.tsx index 956f403..254b066 100644 --- a/client/src/pages/Landing.tsx +++ b/client/src/pages/Landing.tsx @@ -26,7 +26,7 @@ interface Provider { lastSeen: string } -interface ProofSet { +interface DataSet { setId: number owner: string listenerAddr: string @@ -67,7 +67,7 @@ interface SearchResult { export const Landing = () => { const [providers, setProviders] = useState([]) - const [proofSets, setProofSets] = useState([]) + const [proofSets, setProofSets] = useState([]) const [metrics, setMetrics] = useState(null) const [loading, setLoading] = useState(true) const [providerPage, setProviderPage] = useState(1) @@ -167,7 +167,7 @@ export const Landing = () => { setSearchQuery(e.target.value)} @@ -194,7 +194,7 @@ export const Landing = () => { >

- {result.type === 'provider' ? 'Provider: ' : 'ProofSet: '} + {result.type === 'provider' ? 'Provider: ' : 'DataSet: '} {result.id}

@@ -268,7 +268,7 @@ export const Landing = () => { # Provider - ProofSet# + DataSet# Data Size Joined Date Last Seen @@ -335,7 +335,7 @@ export const Landing = () => { # - Proof Set ID + Data Set ID Status Root # # of proofs diff --git a/client/src/pages/ProofSetDetails.tsx b/client/src/pages/ProofSetDetails.tsx index 8cd1381..4cea52b 100644 --- a/client/src/pages/ProofSetDetails.tsx +++ b/client/src/pages/ProofSetDetails.tsx @@ -5,10 +5,10 @@ import { getProofSetTxs, getProofSetEventLogs, getProofSetRoots, - ProofSet, + DataSet, Transaction, EventLog, - Roots, + Pieces, } from '@/api/apiService' import { Pagination } from '@/components/ui/pagination' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' @@ -33,7 +33,7 @@ import { formatDate, formatDataSize } from '@/utility/helper' export const ProofSetDetails = () => { const { proofSetId } = useParams() - const [proofSet, setProofSet] = useState(null) + const [proofSet, setProofSet] = useState(null) const [loading, setLoading] = useState(true) const [currentPage, setCurrentPage] = useState(1) const [currentRootsPage, setCurrentRootsPage] = useState(1) @@ -42,8 +42,8 @@ export const ProofSetDetails = () => { const [totalRoots, setTotalRoots] = useState(0) const [transactions, setTransactions] = useState([]) const [eventLogs, setEventLogs] = useState([]) - const [roots, setRoots] = useState([]) - const [heatmapRoots, setHeatmapRoots] = useState([]) + const [roots, setRoots] = useState([]) + const [heatmapRoots, setHeatmapRoots] = useState([]) const [isHeatmapExpanded, setIsHeatmapExpanded] = useState(false) const [isLoadingAllRoots, setIsLoadingAllRoots] = useState(false) const [activeTab, setActiveTab] = useState('transactions') @@ -273,9 +273,9 @@ export const ProofSetDetails = () => {

- ← Back to Proof Sets + ← Back to Data Sets -

Proof Set Details: {proofSetId}

+

Data Set Details: {proofSetId}

@@ -299,7 +299,7 @@ export const ProofSetDetails = () => { {proofSet.isActive ? 'Active' : 'Inactive'}
- Total Roots: + Total Pieces: {proofSet.totalRoots || 0}
@@ -346,7 +346,7 @@ export const ProofSetDetails = () => {
-

Proof Set Roots

+

Data Set Pieces

diff --git a/client/src/pages/ProofSets.tsx b/client/src/pages/ProofSets.tsx index e606598..067ec11 100644 --- a/client/src/pages/ProofSets.tsx +++ b/client/src/pages/ProofSets.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react' import { Link } from 'react-router-dom' -import { getProofSets, ProofSet } from '@/api/apiService' +import { getProofSets, DataSet } from '@/api/apiService' import { Input } from '@/components/ui/input' import { Search } from 'lucide-react' import { Pagination } from '@/components/ui/pagination' @@ -8,7 +8,7 @@ import { useDebounce } from '@/hooks/useDebounce' import { formatDataSize } from '@/utility/helper' export const ProofSets = () => { - const [proofSets, setProofSets] = useState([]) + const [proofSets, setProofSets] = useState([]) const [loading, setLoading] = useState(true) const [searchQuery, setSearchQuery] = useState('') const [currentPage, setCurrentPage] = useState(1) @@ -57,7 +57,7 @@ export const ProofSets = () => { return (
-

Proof Sets

+

Data Sets

{
- + - - + + diff --git a/client/src/pages/ProviderDetails.tsx b/client/src/pages/ProviderDetails.tsx index a7718ad..246f634 100644 --- a/client/src/pages/ProviderDetails.tsx +++ b/client/src/pages/ProviderDetails.tsx @@ -4,7 +4,7 @@ import { getProviderDetails, getProviderActivities, getProviderProofSets, - ProofSet, + DataSet, ProviderDetailsResponse, } from '@/api/apiService' import { Pagination } from '@/components/ui/pagination' @@ -27,7 +27,7 @@ export const ProviderDetails = () => { const [provider, setProvider] = useState(null) const [loading, setLoading] = useState(true) const [activities, setActivities] = useState([]) - const [proofSets, setProofSets] = useState([]) + const [proofSets, setProofSets] = useState([]) const [currentPage, setCurrentPage] = useState(1) const [totalProofSets, setTotalProofSets] = useState(0) const ITEMS_PER_PAGE = 10 @@ -95,13 +95,13 @@ export const ProviderDetails = () => {

Overview

-
Active Proof Sets: {provider.activeProofSets}
-
Total Proof Sets: {provider.proofSetIds.length}
+
Active Data Sets: {provider.activeProofSets}
+
Total Data Sets: {provider.proofSetIds.length}
Data Stored:{' '} {(Number(provider.totalDataSize) / 1024 ** 3).toFixed(2)} GB
-
Total Roots: {provider.numRoots}
+
Total Pieces: {provider.numRoots}
Faults: {provider.totalFaultedPeriods}
First Seen: {formatDate(provider.firstSeen, false)}
Last Seen: {formatDate(provider.lastSeen, false)}
@@ -194,7 +194,7 @@ export const ProviderDetails = () => {
- + diff --git a/client/src/pages/Providers.tsx b/client/src/pages/Providers.tsx index 08bdf46..7d4e698 100644 --- a/client/src/pages/Providers.tsx +++ b/client/src/pages/Providers.tsx @@ -75,8 +75,8 @@ export const Providers = () => { - - + + diff --git a/docs/server/openapi.yaml b/docs/server/openapi.yaml index 9f8edf9..bc6264a 100644 --- a/docs/server/openapi.yaml +++ b/docs/server/openapi.yaml @@ -60,7 +60,7 @@ paths: $ref: "#/components/schemas/Provider" /providers/:providerId/proof-sets: get: - summary: Get Proof Sets for a Provider + summary: Get Data Sets for a Provider parameters: - name: providerId in: path @@ -91,7 +91,7 @@ paths: data: type: array items: - $ref: "#/components/schemas/ProofSet" + $ref: "#/components/schemas/DataSet" metadata: $ref: "#/components/schemas/Metadata" /providers/:providerId/activities: @@ -123,7 +123,7 @@ paths: /proofsets: get: - summary: Get list of all Proof Sets + summary: Get list of all Data Sets description: Retrieve a list of the top 5 proof sets, sorted by a specified metric such as number of proofs submitted or data size. parameters: - name: sortBy @@ -165,7 +165,7 @@ paths: data: type: array items: - $ref: "#/components/schemas/ProofSet" + $ref: "#/components/schemas/DataSet" metadata: $ref: "#/components/schemas/Metadata" "400": @@ -180,7 +180,7 @@ paths: description: Error message /proofsets/:proofSetId: get: - summary: Get ProofSet Details + summary: Get DataSet Details description: Retrieve detailed information about a specific proof set. parameters: - name: proofSetId @@ -191,11 +191,11 @@ paths: type: string responses: "200": - description: ProofSet details + description: DataSet details content: application/json: schema: - $ref: "#/components/schemas/ProofSet" + $ref: "#/components/schemas/DataSet" "400": description: Invalid query parameter content: @@ -207,7 +207,7 @@ paths: type: string description: Error message "404": - description: ProofSet not found + description: DataSet not found content: application/json: schema: @@ -218,7 +218,7 @@ paths: description: Error message /proofsets/:proofSetId/txs: get: - summary: Get ProofSet Transactions + summary: Get DataSet Transactions description: Retrieve detailed information about proof set transaction. parameters: - name: proofSetId @@ -260,7 +260,7 @@ paths: default: 10 responses: "200": - description: ProofSet details + description: DataSet details content: application/json: schema: @@ -274,7 +274,7 @@ paths: $ref: "#/components/schemas/Metadata" /proofsets/:proofSetId/event-logs: get: - summary: Get ProofSet Event Logs + summary: Get DataSet Event Logs description: Retrieve detailed information about proof set event logs. parameters: - name: proofSetId @@ -318,7 +318,7 @@ paths: default: 10 responses: "200": - description: ProofSet details + description: DataSet details content: application/json: schema: @@ -332,7 +332,7 @@ paths: $ref: "#/components/schemas/Metadata" /proofsets/:proofSetId/roots: get: - summary: Get ProofSet Roots + summary: Get DataSet Pieces description: Retrieve detailed information about proof set roots. parameters: - name: proofSetId @@ -377,7 +377,7 @@ paths: default: 10 responses: "200": - description: ProofSet details + description: DataSet details content: application/json: schema: @@ -464,7 +464,7 @@ components: updatedAt: type: string format: date-time - ProofSet: + DataSet: type: object properties: id: diff --git a/docs/subgraph/graphql-api.md b/docs/subgraph/graphql-api.md index 7cd626c..1722e6e 100644 --- a/docs/subgraph/graphql-api.md +++ b/docs/subgraph/graphql-api.md @@ -10,8 +10,8 @@ This document provides a comprehensive guide to the GraphQL API for the PDP Scan - [Query Examples](#query-examples) - [Network Metrics](#network-metrics) - [Providers](#providers) - - [Proof Sets](#proof-sets) - - [Roots](#roots) + - [Data Sets](#proof-sets) + - [Pieces](#roots) - [Transactions](#transactions) - [Event Logs](#event-logs) - [Fault Records](#fault-records) @@ -38,15 +38,15 @@ Most queries support the following parameters: Understanding the relationships between entities helps in constructing effective queries: -- **Provider** → **ProofSet**: One-to-many (A provider can have multiple proof sets) -- **ProofSet** → **Root**: One-to-many (A proof set can have multiple roots) -- **ProofSet** → **Transaction**: One-to-many (A proof set can have multiple transactions) -- **ProofSet** → **EventLog**: One-to-many (A proof set can have multiple event logs) +- **Provider** → **DataSet**: One-to-many (A provider can have multiple proof sets) +- **DataSet** → **Root**: One-to-many (A proof set can have multiple roots) +- **DataSet** → **Transaction**: One-to-many (A proof set can have multiple transactions) +- **DataSet** → **EventLog**: One-to-many (A proof set can have multiple event logs) - **Transaction** → **EventLog**: One-to-many (A transaction can have multiple event logs) -- **ProofSet** → **FaultRecord**: One-to-many (A proof set can have multiple fault records) +- **DataSet** → **FaultRecord**: One-to-many (A proof set can have multiple fault records) - **Root** → **FaultRecord**: Many-to-many (Multiple roots can be in multiple fault records) - **Provider** → **Weekly/MonthlyProviderActivity**: One-to-many (Time-based metrics) -- **ProofSet** → **Weekly/MonthlyProofSetActivity**: One-to-many (Time-based metrics) +- **DataSet** → **Weekly/MonthlyProofSetActivity**: One-to-many (Time-based metrics) ## Query Examples @@ -120,7 +120,7 @@ query ProviderById($providerId: ID!) { } ``` -#### Query Provider with Proof Sets +#### Query Provider with Data Sets ```graphql query ProviderWithProofSets($providerId: ID!, $first: Int, $skip: Int) { @@ -170,11 +170,11 @@ query FilteredProviders($minDataSize: BigInt) { } ``` -### Proof Sets +### Data Sets -Proof Sets are collections of roots that providers maintain and prove possession of. +Data Sets are collections of roots that providers maintain and prove possession of. -#### Query All Proof Sets +#### Query All Data Sets ```graphql query AllProofSets($first: Int, $skip: Int) { @@ -198,7 +198,7 @@ query AllProofSets($first: Int, $skip: Int) { } ``` -#### Query Proof Set by ID +#### Query Data Set by ID ```graphql query ProofSetById($proofSetId: ID!) { @@ -228,7 +228,7 @@ query ProofSetById($proofSetId: ID!) { } ``` -#### Query Proof Set with Roots +#### Query Data Set with Pieces ```graphql query ProofSetWithRoots($proofSetId: ID!, $first: Int, $skip: Int) { @@ -254,7 +254,7 @@ query ProofSetWithRoots($proofSetId: ID!, $first: Int, $skip: Int) { } ``` -#### Filter Proof Sets by Status +#### Filter Data Sets by Status ```graphql query ActiveProofSets($first: Int) { @@ -276,11 +276,11 @@ query ActiveProofSets($first: Int) { } ``` -### Roots +### Pieces -Roots represent data commitments within proof sets. +Pieces represent data commitments within proof sets. -#### Query All Roots +#### Query All Pieces ```graphql query AllRoots($first: Int, $skip: Int) { @@ -334,7 +334,7 @@ query RootById($rootId: ID!) { } ``` -#### Filter Roots by Criteria +#### Filter Pieces by Criteria ```graphql query FilteredRoots($minSize: BigInt, $isRemoved: Boolean) { @@ -388,7 +388,7 @@ query AllTransactions($first: Int, $skip: Int) { } ``` -#### Query Transactions for a Proof Set +#### Query Transactions for a Data Set ```graphql query ProofSetTransactions($proofSetId: BigInt!, $first: Int, $skip: Int) { @@ -498,7 +498,7 @@ query EventLogsByName($eventName: String!, $first: Int) { } ``` -#### Query Event Logs for a Proof Set +#### Query Event Logs for a Data Set ```graphql query ProofSetEventLogs($proofSetId: BigInt!, $first: Int, $skip: Int) { @@ -546,7 +546,7 @@ query AllFaultRecords($first: Int, $skip: Int) { } ``` -#### Query Fault Records for a Proof Set +#### Query Fault Records for a Data Set ```graphql query ProofSetFaultRecords($proofSetId: BigInt!, $first: Int) { @@ -624,7 +624,7 @@ query ProviderMonthlyActivities($providerId: Bytes!) { } ``` -#### Query Weekly Proof Set Activities +#### Query Weekly Data Set Activities ```graphql query ProofSetWeeklyActivities($proofSetId: BigInt!) { @@ -646,7 +646,7 @@ query ProofSetWeeklyActivities($proofSetId: BigInt!) { } ``` -#### Query Monthly Proof Set Activities +#### Query Monthly Data Set Activities ```graphql query ProofSetMonthlyActivities($proofSetId: BigInt!) { @@ -670,7 +670,7 @@ query ProofSetMonthlyActivities($proofSetId: BigInt!) { ## Advanced Queries -### Combined Provider and Proof Set Data +### Combined Provider and Data Set Data ```graphql query ProviderWithDetailedProofSets($providerId: ID!, $first: Int, $skip: Int) { @@ -764,7 +764,7 @@ query NetworkOverview($first: Int) { } ``` -### Search by Provider or Proof Set ID +### Search by Provider or Data Set ID ```graphql query Search($providerId: ID, $proofSetId: Bytes) { diff --git a/subgraph-client/public/docs/subgraph/graphql-api.md b/subgraph-client/public/docs/subgraph/graphql-api.md index 4288682..1363b41 100644 --- a/subgraph-client/public/docs/subgraph/graphql-api.md +++ b/subgraph-client/public/docs/subgraph/graphql-api.md @@ -10,8 +10,8 @@ This document provides a comprehensive guide to the GraphQL API for the PDP Scan - [Query Examples](#query-examples) - [Network Metrics](#network-metrics) - [Providers](#providers) - - [Proof Sets](#proof-sets) - - [Roots](#roots) + - [Data Sets](#proof-sets) + - [Pieces](#roots) - [Transactions](#transactions) - [Event Logs](#event-logs) - [Fault Records](#fault-records) @@ -38,15 +38,15 @@ Most queries support the following parameters: Understanding the relationships between entities helps in constructing effective queries: -- **Provider** → **ProofSet**: One-to-many (A provider can have multiple proof sets) -- **ProofSet** → **Root**: One-to-many (A proof set can have multiple roots) -- **ProofSet** → **Transaction**: One-to-many (A proof set can have multiple transactions) -- **ProofSet** → **EventLog**: One-to-many (A proof set can have multiple event logs) +- **Provider** → **DataSet**: One-to-many (A provider can have multiple proof sets) +- **DataSet** → **Root**: One-to-many (A proof set can have multiple roots) +- **DataSet** → **Transaction**: One-to-many (A proof set can have multiple transactions) +- **DataSet** → **EventLog**: One-to-many (A proof set can have multiple event logs) - **Transaction** → **EventLog**: One-to-many (A transaction can have multiple event logs) -- **ProofSet** → **FaultRecord**: One-to-many (A proof set can have multiple fault records) +- **DataSet** → **FaultRecord**: One-to-many (A proof set can have multiple fault records) - **Root** → **FaultRecord**: Many-to-many (Multiple roots can be in multiple fault records) - **Provider** → **Weekly/MonthlyProviderActivity**: One-to-many (Time-based metrics) -- **ProofSet** → **Weekly/MonthlyProofSetActivity**: One-to-many (Time-based metrics) +- **DataSet** → **Weekly/MonthlyProofSetActivity**: One-to-many (Time-based metrics) ## Query Examples @@ -120,7 +120,7 @@ query ProviderById($providerId: ID!) { } ``` -#### Query Provider with Proof Sets +#### Query Provider with Data Sets ```graphql query ProviderWithProofSets($providerId: ID!, $first: Int, $skip: Int) { @@ -170,11 +170,11 @@ query FilteredProviders($minDataSize: BigInt) { } ``` -### Proof Sets +### Data Sets -Proof Sets are collections of roots that providers maintain and prove possession of. +Data Sets are collections of roots that providers maintain and prove possession of. -#### Query All Proof Sets +#### Query All Data Sets ```graphql query AllProofSets($first: Int, $skip: Int) { @@ -198,7 +198,7 @@ query AllProofSets($first: Int, $skip: Int) { } ``` -#### Query Proof Set by ID +#### Query Data Set by ID ```graphql query ProofSetById($proofSetId: ID!) { @@ -228,7 +228,7 @@ query ProofSetById($proofSetId: ID!) { } ``` -#### Query Proof Set with Roots +#### Query Data Set with Pieces ```graphql query ProofSetWithRoots($proofSetId: ID!, $first: Int, $skip: Int) { @@ -254,7 +254,7 @@ query ProofSetWithRoots($proofSetId: ID!, $first: Int, $skip: Int) { } ``` -#### Filter Proof Sets by Status +#### Filter Data Sets by Status ```graphql query ActiveProofSets($first: Int) { @@ -276,11 +276,11 @@ query ActiveProofSets($first: Int) { } ``` -### Roots +### Pieces -Roots represent data commitments within proof sets. +Pieces represent data commitments within proof sets. -#### Query All Roots +#### Query All Pieces ```graphql query AllRoots($first: Int, $skip: Int) { @@ -334,7 +334,7 @@ query RootById($rootId: ID!) { } ``` -#### Filter Roots by Criteria +#### Filter Pieces by Criteria ```graphql query FilteredRoots($minSize: BigInt, $isRemoved: Boolean) { @@ -388,7 +388,7 @@ query AllTransactions($first: Int, $skip: Int) { } ``` -#### Query Transactions for a Proof Set +#### Query Transactions for a Data Set ```graphql query ProofSetTransactions($proofSetId: BigInt!, $first: Int, $skip: Int) { @@ -498,7 +498,7 @@ query EventLogsByName($eventName: String!, $first: Int) { } ``` -#### Query Event Logs for a Proof Set +#### Query Event Logs for a Data Set ```graphql query ProofSetEventLogs($proofSetId: BigInt!, $first: Int, $skip: Int) { @@ -546,7 +546,7 @@ query AllFaultRecords($first: Int, $skip: Int) { } ``` -#### Query Fault Records for a Proof Set +#### Query Fault Records for a Data Set ```graphql query ProofSetFaultRecords($proofSetId: BigInt!, $first: Int) { @@ -624,7 +624,7 @@ query ProviderMonthlyActivities($providerId: Bytes!) { } ``` -#### Query Weekly Proof Set Activities +#### Query Weekly Data Set Activities ```graphql query ProofSetWeeklyActivities($proofSetId: BigInt!) { @@ -646,7 +646,7 @@ query ProofSetWeeklyActivities($proofSetId: BigInt!) { } ``` -#### Query Monthly Proof Set Activities +#### Query Monthly Data Set Activities ```graphql query ProofSetMonthlyActivities($proofSetId: BigInt!) { @@ -670,7 +670,7 @@ query ProofSetMonthlyActivities($proofSetId: BigInt!) { ## Advanced Queries -### Combined Provider and Proof Set Data +### Combined Provider and Data Set Data ```graphql query ProviderWithDetailedProofSets($providerId: ID!, $first: Int, $skip: Int) { @@ -764,7 +764,7 @@ query NetworkOverview($first: Int) { } ``` -### Search by Provider or Proof Set ID +### Search by Provider or Data Set ID ```graphql query Search($providerId: ID, $proofSetId: Bytes) { diff --git a/subgraph-client/src/api/apiService.ts b/subgraph-client/src/api/apiService.ts index 6f15e90..84c4a0d 100644 --- a/subgraph-client/src/api/apiService.ts +++ b/subgraph-client/src/api/apiService.ts @@ -1,6 +1,6 @@ import { fetcher } from '@/utility/fetcher' import { providerAndProofSetQuery } from '@/utility/queries' -import type { Provider, ProofSet, Root } from '@/utility/types' +import type { Provider, DataSet, Root } from '@/utility/types' import { normalizeBytesFilter, parseRootCidToHex } from '@/utility/helper' import type { Toast, ToasterToast } from '@/hooks/use-toast' @@ -42,7 +42,7 @@ export const search = async ( } const providerAndProofSet = await fetcher<{ providers: Provider[] - proofSets: ProofSet[] + proofSets: DataSet[] roots: Root[] }>([ subgraphUrl, diff --git a/subgraph-client/src/components/Landing/NetworkStatsCard.tsx b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx index 7b33440..995b61e 100644 --- a/subgraph-client/src/components/Landing/NetworkStatsCard.tsx +++ b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx @@ -52,7 +52,7 @@ export const NetworkStatsCard: React.FC = ({ value={Number(metrics.totalProviders).toLocaleString()} /> = ({ value={formatTokenAmount(metrics.totalProofFeePaidInFil)} /> = ({ value={(Number(metrics.totalProofs) * 5).toLocaleString()} /> = ({ return ( - Error Loading Recent Proof Sets + Error Loading Recent Data Sets Could not load recent proof sets. Error:{' '} {error.message || 'Unknown error'} @@ -49,10 +49,10 @@ export const RecentProofSetsTable: React.FC = ({
Proof Set IDData Set ID Owner StatusTotal RootsProved RootsTotal PiecesProved Pieces Data Size Last Proof Epoch Next Challenge
#Proof Set IDData Set ID Status Root # Last Proven EpochProvider ID Status Data SizeProof SetsTotal RootsData SetsTotal Pieces Faults First Seen Last Seen
- + - + @@ -67,7 +67,7 @@ export const RecentProofSetsTable: React.FC = ({ diff --git a/subgraph-client/src/components/Landing/RecentProvidersTable.tsx b/subgraph-client/src/components/Landing/RecentProvidersTable.tsx index ea1fccb..66e12f0 100644 --- a/subgraph-client/src/components/Landing/RecentProvidersTable.tsx +++ b/subgraph-client/src/components/Landing/RecentProvidersTable.tsx @@ -50,8 +50,8 @@ export const RecentProvidersTable: React.FC = ({ - - + + diff --git a/subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx b/subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx index ec1f3e0..c5f7489 100644 --- a/subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx +++ b/subgraph-client/src/components/ProofSetDetails/ProofSetActivityChart.tsx @@ -25,11 +25,11 @@ const getLabelAndColor = (activityType: string) => { case 'totalProofs': return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } case 'totalFaultedRoots': - return { label: 'Faulted Roots', color: 'hsl(var(--chart-2))' } + return { label: 'Faulted Pieces', color: 'hsl(var(--chart-2))' } case 'totalRootsProved': - return { label: 'Roots Proved', color: 'hsl(var(--chart-3))' } + return { label: 'Pieces Proved', color: 'hsl(var(--chart-3))' } case 'totalRootsAdded': - return { label: 'Roots Added', color: 'hsl(var(--chart-5))' } + return { label: 'Pieces Added', color: 'hsl(var(--chart-5))' } default: return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } } @@ -92,7 +92,7 @@ export const ProofSetActivityChart: React.FC = ({ return (
-

Weekly Proof Set Activity

+

Weekly Data Set Activity

diff --git a/subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx b/subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx index 2dcacfd..eabbfc7 100644 --- a/subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx +++ b/subgraph-client/src/components/ProofSetDetails/ProofSetOverview.tsx @@ -1,13 +1,13 @@ import React from 'react' import { Link } from 'react-router-dom' -import { ProofSet } from '@/utility/types' +import { DataSet } from '@/utility/types' import { formatDataSize, formatTokenAmount, formatDate } from '@/utility/helper' import { Skeleton } from '@/components/ui/skeleton' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { AlertTriangle } from 'lucide-react' interface ProofSetOverviewProps { - proofSet?: ProofSet + proofSet?: DataSet isLoading: boolean error: any } @@ -67,11 +67,11 @@ export const ProofSetOverview: React.FC = ({ {proofSet.isActive ? 'Active' : 'Inactive'}
- Total Roots: + Total Pieces: {proofSet.totalRoots || 0}
- Total Roots Proved: + Total Pieces Proved: {proofSet.totalProvedRoots || 0}
diff --git a/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx index ada2fbd..8118b63 100644 --- a/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx +++ b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx @@ -34,7 +34,7 @@ export const RootsTable: React.FC = ({ return ( - Error Loading Roots + Error Loading Pieces Could not load roots data. Error: {error.message || 'Unknown error'} @@ -57,7 +57,7 @@ export const RootsTable: React.FC = ({ return (
-

Roots

+

Pieces

{roots.length === 0 ? (
diff --git a/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx b/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx index cb28eca..a921a5e 100644 --- a/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx +++ b/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx @@ -1,13 +1,13 @@ import React from 'react' import { Link } from 'react-router-dom' -import { ProofSet } from '@/utility/types' +import { DataSet } from '@/utility/types' import { Skeleton } from '@/components/ui/skeleton' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { AlertTriangle } from 'lucide-react' import { formatDataSize } from '@/utility/helper' interface ProofSetsTableProps { - proofSets: ProofSet[] + proofSets: DataSet[] isLoading: boolean error: any searchQuery: string @@ -27,7 +27,7 @@ export const ProofSetsTable: React.FC = ({ return ( - Error Loading Proof Sets + Error Loading Data Sets Could not load proof sets list. Error:{' '} {error.message || 'Unknown error'} @@ -49,11 +49,11 @@ export const ProofSetsTable: React.FC = ({
Proof Set IDData Set ID Owner StatusRootsPieces Data Size Created At
Provider IDProof SetsRootsData SetsPieces Data Size Joined Date
- + - - + + diff --git a/subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx b/subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx index 1dd6117..1033122 100644 --- a/subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx +++ b/subgraph-client/src/components/ProviderDetails/ProviderActivityChart.tsx @@ -19,11 +19,11 @@ const getLabelAndColor = (activityType: string) => { case 'totalProofs': return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } case 'totalFaultedRoots': - return { label: 'Faulted Roots', color: 'hsl(var(--chart-2))' } + return { label: 'Faulted Pieces', color: 'hsl(var(--chart-2))' } case 'totalRootsProved': - return { label: 'Roots Proved', color: 'hsl(var(--chart-3))' } + return { label: 'Pieces Proved', color: 'hsl(var(--chart-3))' } case 'totalRootsAdded': - return { label: 'Roots Added', color: 'hsl(var(--chart-5))' } + return { label: 'Pieces Added', color: 'hsl(var(--chart-5))' } default: return { label: 'Proof Submissions', color: `hsl(var(--chart-1))` } } @@ -109,9 +109,9 @@ export const ProviderActivityChart: React.FC = ({ Proof Submissions - Faulted Roots - Roots Proved - Roots Added + Faulted Pieces + Pieces Proved + Pieces Added diff --git a/subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx b/subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx index b5318be..f91ca4d 100644 --- a/subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx +++ b/subgraph-client/src/components/ProviderDetails/ProviderOverviewCard.tsx @@ -48,17 +48,17 @@ export const ProviderOverviewCard: React.FC = ({

Overview

- + - + - + = ({ return ( - Error Loading Proof Sets + Error Loading Data Sets Could not load proof sets for this provider. Error:{' '} {error.message || 'Unknown error'} @@ -59,7 +59,7 @@ export const ProviderProofSetsTable: React.FC = ({ return (
-

Proof Sets ({totalProofSets})

+

Data Sets ({totalProofSets})

{proofSets.length === 0 ? ( @@ -71,10 +71,10 @@ export const ProviderProofSetsTable: React.FC = ({
- + - + diff --git a/subgraph-client/src/components/Providers/ProvidersTable.tsx b/subgraph-client/src/components/Providers/ProvidersTable.tsx index 8bcfc3a..b61395a 100644 --- a/subgraph-client/src/components/Providers/ProvidersTable.tsx +++ b/subgraph-client/src/components/Providers/ProvidersTable.tsx @@ -52,8 +52,8 @@ export const ProvidersTable: React.FC = ({ - - + + diff --git a/subgraph-client/src/components/Services/ServicesTable.tsx b/subgraph-client/src/components/Services/ServicesTable.tsx index 287ca7b..a0f82d8 100644 --- a/subgraph-client/src/components/Services/ServicesTable.tsx +++ b/subgraph-client/src/components/Services/ServicesTable.tsx @@ -57,19 +57,19 @@ export const ServicesTable: React.FC = ({ Address @@ -130,19 +130,19 @@ const ServicesTableSkeleton: React.FC = ({ Address diff --git a/subgraph-client/src/components/page-header.tsx b/subgraph-client/src/components/page-header.tsx index 512f2a4..bed06d3 100644 --- a/subgraph-client/src/components/page-header.tsx +++ b/subgraph-client/src/components/page-header.tsx @@ -55,7 +55,7 @@ export default function PageHeader() { Gas Calculator( + } = useGraphQL<{ proofSets: DataSet[] }>( proofSetQuery, { where: { setId: proofSetId }, diff --git a/subgraph-client/src/pages/GasCalculator.tsx b/subgraph-client/src/pages/GasCalculator.tsx index 7ffd7fa..ca25fbe 100644 --- a/subgraph-client/src/pages/GasCalculator.tsx +++ b/subgraph-client/src/pages/GasCalculator.tsx @@ -161,7 +161,7 @@ export const GasCalculator = () => { for a proofset of 100 roots costs approximately 140M gas units. -
  • ProofSet size does not significantly impact gas usage.
  • +
  • DataSet size does not significantly impact gas usage.
  • Increasing the number of roots increases cost by ~10M per 10x more roots. @@ -201,7 +201,7 @@ export const GasCalculator = () => {
  • - + diff --git a/client/src/pages/ProviderDetails.tsx b/client/src/pages/ProviderDetails.tsx index 246f634..2cec069 100644 --- a/client/src/pages/ProviderDetails.tsx +++ b/client/src/pages/ProviderDetails.tsx @@ -129,7 +129,7 @@ export const ProviderDetails = () => { config={{ proofs: { label: - activityType === 'prove_possession' ? 'Proofs' : 'Faults', + activityType === 'prove_possession' ? 'Data' : 'Faults', color: '#000', }, }} diff --git a/subgraph-client/src/components/Landing/NetworkStatsCard.tsx b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx index 995b61e..2cbc7ea 100644 --- a/subgraph-client/src/components/Landing/NetworkStatsCard.tsx +++ b/subgraph-client/src/components/Landing/NetworkStatsCard.tsx @@ -68,7 +68,7 @@ export const NetworkStatsCard: React.FC = ({ value={Number(metrics.totalActiveRoots).toLocaleString()} /> { CID: {decodeRootCid(root.cid)}

    - Total Proofs: {root.totalProofsSubmitted} + Total Data: {root.totalProofsSubmitted}

    Total Faulted Periods: {root.totalPeriodsFaulted} diff --git a/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx index 8118b63..8a9f188 100644 --- a/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx +++ b/subgraph-client/src/components/ProofSetDetails/RootsTable.tsx @@ -71,7 +71,7 @@ export const RootsTable: React.FC = ({

    - + From 410cec72f94789cacf7d8dabf07c23aa4f8a622a Mon Sep 17 00:00:00 2001 From: kaola526 Date: Tue, 12 Aug 2025 08:28:35 +0800 Subject: [PATCH 50/51] upgrade subgraph --- subgraph-client/package.json | 2 + subgraph-client/src/api/apiService.ts | 6 +- .../Landing/RecentProofSetsTable.tsx | 28 +- .../components/ProofSets/ProofSetsTable.tsx | 42 +- .../src/contexts/NetworkContext.tsx | 3 + .../src/hooks/useProofSetDetails.tsx | 12 +- subgraph-client/src/pages/Landing.tsx | 6 +- subgraph-client/src/pages/ProofSets.tsx | 8 +- subgraph-client/src/pages/ProviderDetails.tsx | 2 +- subgraph-client/src/pages/ServiceDetails.tsx | 6 +- subgraph-client/src/utility/queries.ts | 16 +- subgraph-client/src/utility/types.ts | 4 +- subgraph-client/vite.config.ts | 53 - subgraph-client/yarn.lock | 6547 +++++++++ subgraph/.pnp.cjs | 12239 ++++++++++++++++ subgraph/.pnp.loader.mjs | 2126 +++ subgraph/.yarn/install-state.gz | Bin 0 -> 317218 bytes subgraph/package.json | 10 +- subgraph/subgraph.yaml | 12 +- subgraph/utils/index.ts | 2 +- subgraph/yarn.lock | 1601 +- 21 files changed, 21784 insertions(+), 941 deletions(-) create mode 100644 subgraph-client/yarn.lock create mode 100755 subgraph/.pnp.cjs create mode 100644 subgraph/.pnp.loader.mjs create mode 100644 subgraph/.yarn/install-state.gz diff --git a/subgraph-client/package.json b/subgraph-client/package.json index 6282fa0..55d0c81 100644 --- a/subgraph-client/package.json +++ b/subgraph-client/package.json @@ -10,6 +10,7 @@ "preview": "vite preview" }, "dependencies": { + "@babel/runtime": "^7.28.2", "@emotion/react": "^11.14.0", "@emotion/styled": "^11.14.0", "@mui/material": "^6.4.4", @@ -32,6 +33,7 @@ "clsx": "^2.1.1", "cmdk": "^1.0.0", "dotenv": "^16.4.5", + "graphql": "^16.11.0", "graphql-request": "^7.1.2", "js-cookie": "^3.0.5", "lucide-react": "^0.376.0", diff --git a/subgraph-client/src/api/apiService.ts b/subgraph-client/src/api/apiService.ts index 84c4a0d..ee429db 100644 --- a/subgraph-client/src/api/apiService.ts +++ b/subgraph-client/src/api/apiService.ts @@ -42,7 +42,7 @@ export const search = async ( } const providerAndProofSet = await fetcher<{ providers: Provider[] - proofSets: DataSet[] + dataSets: DataSet[] roots: Root[] }>([ subgraphUrl, @@ -72,9 +72,9 @@ export const search = async ( ) } - if (providerAndProofSet?.proofSets?.length > 0) { + if (providerAndProofSet?.dataSets?.length > 0) { searchResults.push( - ...providerAndProofSet.proofSets.map((proofSet) => ({ + ...providerAndProofSet.dataSets.map((proofSet) => ({ type: 'proofset' as const, id: proofSet.setId, provider_id: proofSet.owner.address, diff --git a/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx b/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx index 5a717ce..fbc4cc9 100644 --- a/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx +++ b/subgraph-client/src/components/Landing/RecentProofSetsTable.tsx @@ -7,14 +7,14 @@ import { formatDataSize, formatDate } from '@/utility/helper' import { CopyableText } from '@/components/shared/CopyableText' interface RecentProofSetsTableProps { - proofSets?: DataSet[] + dataSets?: DataSet[] isLoading: boolean error: any itemsToShow?: number } export const RecentProofSetsTable: React.FC = ({ - proofSets, + dataSets, isLoading, error, itemsToShow = 10, @@ -36,7 +36,7 @@ export const RecentProofSetsTable: React.FC = ({ ) } - if (!proofSets || proofSets.length === 0) { + if (!dataSets || dataSets.length === 0) { return (
    No recent proof sets found. @@ -58,23 +58,23 @@ export const RecentProofSetsTable: React.FC = ({
    - {proofSets.map((proofSet) => ( + {dataSets.map((dataSet) => ( - - - + + + ))} diff --git a/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx b/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx index a921a5e..b72361d 100644 --- a/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx +++ b/subgraph-client/src/components/ProofSets/ProofSetsTable.tsx @@ -7,14 +7,14 @@ import { AlertTriangle } from 'lucide-react' import { formatDataSize } from '@/utility/helper' interface ProofSetsTableProps { - proofSets: DataSet[] + dataSets: DataSet[] isLoading: boolean error: any searchQuery: string } export const ProofSetsTable: React.FC = ({ - proofSets, + dataSets, isLoading, error, searchQuery, @@ -36,7 +36,7 @@ export const ProofSetsTable: React.FC = ({ ) } - if (proofSets.length === 0) { + if (dataSets.length === 0) { return (
    No proof sets found{searchQuery ? ` matching "${searchQuery}"` : ''}. @@ -60,52 +60,52 @@ export const ProofSetsTable: React.FC = ({
    - {proofSets.map((proofSet) => ( - + {dataSets.map((dataSet) => ( + - - - + + + diff --git a/subgraph-client/src/contexts/NetworkContext.tsx b/subgraph-client/src/contexts/NetworkContext.tsx index f84ee1c..d4b66a5 100644 --- a/subgraph-client/src/contexts/NetworkContext.tsx +++ b/subgraph-client/src/contexts/NetworkContext.tsx @@ -32,6 +32,9 @@ export const NetworkProvider = ({ children }: { children: ReactNode }) => { 'calibration', } + if (network === 'calibration') { + return `https://pdpsql.vxb.ai/subgraphs/name/pd/${PROJECT_NAME}` + } return `https://api.goldsky.com/api/public/${PROJECT_ID}/subgraphs/${PROJECT_NAME}/${versions[network]}/gn` } diff --git a/subgraph-client/src/hooks/useProofSetDetails.tsx b/subgraph-client/src/hooks/useProofSetDetails.tsx index a77f3bf..250f2f7 100644 --- a/subgraph-client/src/hooks/useProofSetDetails.tsx +++ b/subgraph-client/src/hooks/useProofSetDetails.tsx @@ -47,7 +47,7 @@ export function useProofSetDetails( data: proofSetData, error: proofSetError, isLoading: proofSetLoading, - } = useGraphQL<{ proofSets: DataSet[] }>( + } = useGraphQL<{ dataSets: DataSet[] }>( proofSetQuery, { where: { setId: proofSetId }, @@ -138,14 +138,14 @@ export function useProofSetDetails( // Update total roots when proofSet data is loaded useEffect(() => { - if (proofSetData?.proofSets?.length > 0) { - setTotalRoots(Number(proofSetData.proofSets[0].totalRoots)) + if (proofSetData?.dataSets?.length > 0) { + setTotalRoots(Number(proofSetData.dataSets[0].totalRoots)) } }, [proofSetData]) return { // Data - proofSet: proofSetData?.proofSets?.[0], + proofSet: proofSetData?.dataSets?.[0], transactions: txsData?.transactions || [], eventLogs: logsData?.eventLogs || [], heatmapRoots: heatmapData?.roots || [], @@ -177,8 +177,8 @@ export function useProofSetDetails( totalRoots, // Metadata - totalTransactions: proofSetData?.proofSets?.[0]?.totalTransactions || '0', - totalEventLogs: proofSetData?.proofSets?.[0]?.totalEventLogs || '0', + totalTransactions: proofSetData?.dataSets?.[0]?.totalTransactions || '0', + totalEventLogs: proofSetData?.dataSets?.[0]?.totalEventLogs || '0', } } diff --git a/subgraph-client/src/pages/Landing.tsx b/subgraph-client/src/pages/Landing.tsx index 010e86b..4015a04 100644 --- a/subgraph-client/src/pages/Landing.tsx +++ b/subgraph-client/src/pages/Landing.tsx @@ -37,7 +37,7 @@ export const Landing = () => { } = useGraphQL<{ networkMetric: NetworkMetrics providers: Provider[] - proofSets: DataSet[] + dataSets: DataSet[] }>( landingDataQuery, { @@ -107,7 +107,7 @@ export const Landing = () => { const metrics = landingData?.networkMetric const providers = landingData?.providers || [] - const proofSets = landingData?.proofSets || [] + const dataSets = landingData?.dataSets || [] const contractAddresses = networkContractAddresses[network] const explorerUrl = explorerUrls[network] @@ -264,7 +264,7 @@ export const Landing = () => {
    { data: proofSetsData, error: proofSetsError, isLoading: proofSetsLoading, - } = useGraphQL<{ proofSets: DataSet[] }>( + } = useGraphQL<{ dataSets: DataSet[] }>( landingProofSetsQuery, { first: ITEMS_PER_PAGE, skip: (currentPage - 1) * ITEMS_PER_PAGE, - where: validatedSearch ? { setId: validatedSearch } : {}, + where: {}, orderBy: 'createdAt', orderDirection: 'desc', }, @@ -42,7 +42,7 @@ export const ProofSets = () => { } ) - const proofSets = proofSetsData?.proofSets || [] + const dataSets = proofSetsData?.dataSets || [] const totalProofSets = parseInt( metricsData?.networkMetric?.totalProofSets || '0' ) @@ -82,7 +82,7 @@ export const ProofSets = () => {
    )} { /> { // Define types for GraphQL responses interface ServiceDetailsResponse { service: Service & { - proofSets: DataSet[] + dataSets: DataSet[] } } @@ -75,7 +75,7 @@ export const ServiceDetails = () => { ) const service = serviceData?.service - const proofSets = service?.proofSets || [] + const dataSets = service?.dataSets || [] const providerLinks = providersData?.service?.providerLinks || [] // Transform providerLinks to providers format expected by ProvidersTable @@ -204,7 +204,7 @@ export const ServiceDetails = () => {
    = 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" + +tiny-invariant@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + +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" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +trough@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/trough/-/trough-2.2.0.tgz#94a60bd6bd375c152c1df911a4b11d5b0256f50f" + integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-interface-checker@^0.1.9: + version "0.1.13" + resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" + integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== + +tslib@^2.0.0, tslib@^2.1.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +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-fest@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" + integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg== + +type-fest@^0.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== + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typescript@^5.2.2: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified@^11.0.0: + version "11.0.5" + resolved "https://registry.yarnpkg.com/unified/-/unified-11.0.5.tgz#f66677610a5c0a9ee90cab2b8d4d66037026d9e1" + integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + dependencies: + "@types/unist" "^3.0.0" + bail "^2.0.0" + devlop "^1.0.0" + extend "^3.0.0" + is-plain-obj "^4.0.0" + trough "^2.0.0" + vfile "^6.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-util-find-after@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz#3fccc1b086b56f34c8b798e1ff90b5c54468e896" + integrity sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-is@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +upath@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +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" + +use-callback-ref@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.3.3.tgz#98d9fab067075841c5b2c6852090d5d0feabe2bf" + integrity sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg== + dependencies: + tslib "^2.0.0" + +use-sidecar@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.1.3.tgz#10e7fd897d130b896e2c546c63a5e8233d00efdb" + integrity sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ== + dependencies: + detect-node-es "^1.1.0" + tslib "^2.0.0" + +use-sync-external-store@^1.0.0, use-sync-external-store@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== + +util-deprecate@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +vfile-location@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-5.0.3.tgz#cb9eacd20f2b6426d19451e0eafa3d0a846225c3" + integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== + dependencies: + "@types/unist" "^3.0.0" + vfile "^6.0.0" + +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + +victory-vendor@^36.6.8: + version "36.9.2" + resolved "https://registry.yarnpkg.com/victory-vendor/-/victory-vendor-36.9.2.tgz#668b02a448fa4ea0f788dbf4228b7e64669ff801" + integrity sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ== + dependencies: + "@types/d3-array" "^3.0.3" + "@types/d3-ease" "^3.0.0" + "@types/d3-interpolate" "^3.0.1" + "@types/d3-scale" "^4.0.2" + "@types/d3-shape" "^3.1.0" + "@types/d3-time" "^3.0.0" + "@types/d3-timer" "^3.0.0" + d3-array "^3.1.6" + d3-ease "^3.0.1" + d3-interpolate "^3.0.1" + d3-scale "^4.0.2" + d3-shape "^3.1.0" + d3-time "^3.0.0" + d3-timer "^3.0.1" + +vite-plugin-pwa@^0.19.1: + version "0.19.8" + resolved "https://registry.yarnpkg.com/vite-plugin-pwa/-/vite-plugin-pwa-0.19.8.tgz#f7be200a4426207358aef807b4a6e1ecbc14d345" + integrity sha512-e1oK0dfhzhDhY3VBuML6c0h8Xfx6EkOVYqolj7g+u8eRfdauZe5RLteCIA/c5gH0CBQ0CNFAuv/AFTx4Z7IXTw== + dependencies: + debug "^4.3.4" + fast-glob "^3.3.2" + pretty-bytes "^6.1.1" + workbox-build "^7.0.0" + workbox-window "^7.0.0" + +vite@^5.2.8: + version "5.4.19" + resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.19.tgz#20efd060410044b3ed555049418a5e7d1998f959" + integrity sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA== + dependencies: + esbuild "^0.21.3" + postcss "^8.4.43" + rollup "^4.20.0" + optionalDependencies: + fsevents "~2.3.3" + +web-namespaces@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" + integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-typed-array@^1.1.16, which-typed-array@^1.1.19: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +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" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +workbox-background-sync@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-7.3.0.tgz#b6340731a8d5b42b9e75a8a87c8806928e6e6303" + integrity sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg== + dependencies: + idb "^7.0.1" + workbox-core "7.3.0" + +workbox-broadcast-update@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-broadcast-update/-/workbox-broadcast-update-7.3.0.tgz#bff86b91795c4b9fa46a758d1a7a151828623280" + integrity sha512-T9/F5VEdJVhwmrIAE+E/kq5at2OY6+OXXgOWQevnubal6sO92Gjo24v6dCVwQiclAF5NS3hlmsifRrpQzZCdUA== + dependencies: + workbox-core "7.3.0" + +workbox-build@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-7.3.0.tgz#ab688f3241b32862236aeeb62b240195f1fe4b62" + integrity sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ== + dependencies: + "@apideck/better-ajv-errors" "^0.3.1" + "@babel/core" "^7.24.4" + "@babel/preset-env" "^7.11.0" + "@babel/runtime" "^7.11.2" + "@rollup/plugin-babel" "^5.2.0" + "@rollup/plugin-node-resolve" "^15.2.3" + "@rollup/plugin-replace" "^2.4.1" + "@rollup/plugin-terser" "^0.4.3" + "@surma/rollup-plugin-off-main-thread" "^2.2.3" + ajv "^8.6.0" + common-tags "^1.8.0" + fast-json-stable-stringify "^2.1.0" + fs-extra "^9.0.1" + glob "^7.1.6" + lodash "^4.17.20" + pretty-bytes "^5.3.0" + rollup "^2.43.1" + source-map "^0.8.0-beta.0" + stringify-object "^3.3.0" + strip-comments "^2.0.1" + tempy "^0.6.0" + upath "^1.2.0" + workbox-background-sync "7.3.0" + workbox-broadcast-update "7.3.0" + workbox-cacheable-response "7.3.0" + workbox-core "7.3.0" + workbox-expiration "7.3.0" + workbox-google-analytics "7.3.0" + workbox-navigation-preload "7.3.0" + workbox-precaching "7.3.0" + workbox-range-requests "7.3.0" + workbox-recipes "7.3.0" + workbox-routing "7.3.0" + workbox-strategies "7.3.0" + workbox-streams "7.3.0" + workbox-sw "7.3.0" + workbox-window "7.3.0" + +workbox-cacheable-response@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-7.3.0.tgz#557b0f5fdfceb22fe243e3f19807c76a0ae646e3" + integrity sha512-eAFERIg6J2LuyELhLlmeRcJFa5e16Mj8kL2yCDbhWE+HUun9skRQrGIFVUagqWj4DMaaPSMWfAolM7XZZxNmxA== + dependencies: + workbox-core "7.3.0" + +workbox-core@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-7.3.0.tgz#f24fb92041a0b7482fe2dd856544aaa9fa105248" + integrity sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw== + +workbox-expiration@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-expiration/-/workbox-expiration-7.3.0.tgz#2c1ee1fdada34aa7e7474f706d5429c914bd10d2" + integrity sha512-lpnSSLp2BM+K6bgFCWc5bS1LR5pAwDWbcKt1iL87/eTSJRdLdAwGQznZE+1czLgn/X05YChsrEegTNxjM067vQ== + dependencies: + idb "^7.0.1" + workbox-core "7.3.0" + +workbox-google-analytics@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-7.3.0.tgz#3c4d4956c0a9800dfb587d82ec8bc0f9cf963791" + integrity sha512-ii/tSfFdhjLHZ2BrYgFNTrb/yk04pw2hasgbM70jpZfLk0vdJAXgaiMAWsoE+wfJDNWoZmBYY0hMVI0v5wWDbg== + dependencies: + workbox-background-sync "7.3.0" + workbox-core "7.3.0" + workbox-routing "7.3.0" + workbox-strategies "7.3.0" + +workbox-navigation-preload@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-7.3.0.tgz#9d54693b9179d5175e66af5ef9a92d1b7cf3e605" + integrity sha512-fTJzogmFaTv4bShZ6aA7Bfj4Cewaq5rp30qcxl2iYM45YD79rKIhvzNHiFj1P+u5ZZldroqhASXwwoyusnr2cg== + dependencies: + workbox-core "7.3.0" + +workbox-precaching@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-7.3.0.tgz#a84663d69efdb334f25c04dba0a72ed3391c4da8" + integrity sha512-ckp/3t0msgXclVAYaNndAGeAoWQUv7Rwc4fdhWL69CCAb2UHo3Cef0KIUctqfQj1p8h6aGyz3w8Cy3Ihq9OmIw== + dependencies: + workbox-core "7.3.0" + workbox-routing "7.3.0" + workbox-strategies "7.3.0" + +workbox-range-requests@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-7.3.0.tgz#1b3d5c235a0ff5271418c3a7183281dc131ccd0d" + integrity sha512-EyFmM1KpDzzAouNF3+EWa15yDEenwxoeXu9bgxOEYnFfCxns7eAxA9WSSaVd8kujFFt3eIbShNqa4hLQNFvmVQ== + dependencies: + workbox-core "7.3.0" + +workbox-recipes@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-recipes/-/workbox-recipes-7.3.0.tgz#fa407101e8ce52850dfba8e17a5afccb733a3942" + integrity sha512-BJro/MpuW35I/zjZQBcoxsctgeB+kyb2JAP5EB3EYzePg8wDGoQuUdyYQS+CheTb+GhqJeWmVs3QxLI8EBP1sg== + dependencies: + workbox-cacheable-response "7.3.0" + workbox-core "7.3.0" + workbox-expiration "7.3.0" + workbox-precaching "7.3.0" + workbox-routing "7.3.0" + workbox-strategies "7.3.0" + +workbox-routing@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-7.3.0.tgz#fc86296bc1155c112ee2c16b3180853586c30208" + integrity sha512-ZUlysUVn5ZUzMOmQN3bqu+gK98vNfgX/gSTZ127izJg/pMMy4LryAthnYtjuqcjkN4HEAx1mdgxNiKJMZQM76A== + dependencies: + workbox-core "7.3.0" + +workbox-strategies@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-7.3.0.tgz#bb1530f205806895aacdea3639e6cf6bfb3a6cb0" + integrity sha512-tmZydug+qzDFATwX7QiEL5Hdf7FrkhjaF9db1CbB39sDmEZJg3l9ayDvPxy8Y18C3Y66Nrr9kkN1f/RlkDgllg== + dependencies: + workbox-core "7.3.0" + +workbox-streams@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-7.3.0.tgz#a4c0ae51b66121a2aa6f89229e237aca6dc27eb5" + integrity sha512-SZnXucyg8x2Y61VGtDjKPO5EgPUG5NDn/v86WYHX+9ZqvAsGOytP0Jxp1bl663YUuMoXSAtsGLL+byHzEuMRpw== + dependencies: + workbox-core "7.3.0" + workbox-routing "7.3.0" + +workbox-sw@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-7.3.0.tgz#39215017e868d7cfe6835b2961f55369d89b3e73" + integrity sha512-aCUyoAZU9IZtH05mn0ACUpyHzPs0lMeJimAYkQkBsOWiqaJLgusfDCR+yllkPkFRxWpZKF8vSvgHYeG7LwhlmA== + +workbox-window@7.3.0, workbox-window@^7.0.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/workbox-window/-/workbox-window-7.3.0.tgz#e71bb0b4d880d2295c96bf1ccadb6cea0df51c07" + integrity sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA== + dependencies: + "@types/trusted-types" "^2.0.2" + workbox-core "7.3.0" + +"wrap-ansi-cjs@npm: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" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yaml@^2.3.4: + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== + +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== + +zwitch@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== diff --git a/subgraph/.pnp.cjs b/subgraph/.pnp.cjs new file mode 100755 index 0000000..fe70a94 --- /dev/null +++ b/subgraph/.pnp.cjs @@ -0,0 +1,12239 @@ +#!/usr/bin/env node +/* eslint-disable */ +// @ts-nocheck +"use strict"; + +const RAW_RUNTIME_STATE = +'{\ + "__info": [\ + "This file is automatically generated. Do not touch it, or risk",\ + "your modifications being lost."\ + ],\ + "dependencyTreeRoots": [\ + {\ + "name": "pd",\ + "reference": "workspace:."\ + }\ + ],\ + "enableTopLevelFallback": true,\ + "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ + "pnpZipBackend": "libzip",\ + "fallbackExclusionList": [\ + ["pd", ["workspace:."]]\ + ],\ + "fallbackPool": [\ + ],\ + "packageRegistryData": [\ + [null, [\ + [null, {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["@graphprotocol/graph-cli", "npm:0.97.1"],\ + ["@graphprotocol/graph-ts", "npm:0.38.1"],\ + ["matchstick-as", "npm:0.6.0"],\ + ["pd", "workspace:."]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["@babel/code-frame", [\ + ["npm:7.26.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/@babel-code-frame-npm-7.26.2-4902b56813-10c0.zip/node_modules/@babel/code-frame/",\ + "packageDependencies": [\ + ["@babel/code-frame", "npm:7.26.2"],\ + ["@babel/helper-validator-identifier", "npm:7.25.9"],\ + ["js-tokens", "npm:4.0.0"],\ + ["picocolors", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@babel/helper-validator-identifier", [\ + ["npm:7.25.9", {\ + "packageLocation": "../../../../.yarn/berry/cache/@babel-helper-validator-identifier-npm-7.25.9-2634b947a4-10c0.zip/node_modules/@babel/helper-validator-identifier/",\ + "packageDependencies": [\ + ["@babel/helper-validator-identifier", "npm:7.25.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@chainsafe/is-ip", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@chainsafe-is-ip-npm-2.1.0-e1cf137b10-10c0.zip/node_modules/@chainsafe/is-ip/",\ + "packageDependencies": [\ + ["@chainsafe/is-ip", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@chainsafe/netmask", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@chainsafe-netmask-npm-2.0.0-44b57d979f-10c0.zip/node_modules/@chainsafe/netmask/",\ + "packageDependencies": [\ + ["@chainsafe/is-ip", "npm:2.1.0"],\ + ["@chainsafe/netmask", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@float-capital/float-subgraph-uncrashable", [\ + ["npm:0.0.0-internal-testing.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/@float-capital-float-subgraph-uncrashable-npm-0.0.0-internal-testing.5-eb69d14a1a-10c0.zip/node_modules/@float-capital/float-subgraph-uncrashable/",\ + "packageDependencies": [\ + ["@float-capital/float-subgraph-uncrashable", "npm:0.0.0-internal-testing.5"],\ + ["@rescript/std", "npm:9.0.0"],\ + ["graphql", "npm:16.10.0"],\ + ["graphql-import-node", "virtual:eb69d14a1a4d45e3540bbe8fffc370854025924c348c3a845d2e5055bee68f768d75946ff587525345f3aed6360b88fb75d578c754c547b161930a2122c30b1d#npm:0.0.5"],\ + ["js-yaml", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@graphprotocol/graph-cli", [\ + ["npm:0.97.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@graphprotocol-graph-cli-npm-0.97.1-9a3d322be2-10c0.zip/node_modules/@graphprotocol/graph-cli/",\ + "packageDependencies": [\ + ["@float-capital/float-subgraph-uncrashable", "npm:0.0.0-internal-testing.5"],\ + ["@graphprotocol/graph-cli", "npm:0.97.1"],\ + ["@oclif/core", "npm:4.3.0"],\ + ["@oclif/plugin-autocomplete", "npm:3.2.27"],\ + ["@oclif/plugin-not-found", "npm:3.2.49"],\ + ["@oclif/plugin-warn-if-update-available", "npm:3.1.38"],\ + ["@pinax/graph-networks-registry", "npm:0.6.7"],\ + ["@whatwg-node/fetch", "npm:0.10.5"],\ + ["assemblyscript", "npm:0.19.23"],\ + ["chokidar", "npm:4.0.3"],\ + ["debug", "virtual:9a3d322be2797a27a5fbdb9bd5b645c0201175c9417fe939ee34ed2edda2250d47f66dbd6a10f44eac51090d5cd043dbff3a660408a14db40b7f1bc46b5effd3#npm:4.4.1"],\ + ["docker-compose", "npm:1.2.0"],\ + ["fs-extra", "npm:11.3.0"],\ + ["glob", "npm:11.0.2"],\ + ["gluegun", "npm:5.2.0"],\ + ["graphql", "npm:16.11.0"],\ + ["immutable", "npm:5.1.2"],\ + ["jayson", "npm:4.2.0"],\ + ["js-yaml", "npm:4.1.0"],\ + ["kubo-rpc-client", "npm:5.1.0"],\ + ["open", "npm:10.1.2"],\ + ["prettier", "npm:3.5.3"],\ + ["semver", "npm:7.7.2"],\ + ["tmp-promise", "npm:3.0.3"],\ + ["undici", "npm:7.9.0"],\ + ["web3-eth-abi", "npm:4.4.1"],\ + ["yaml", "npm:2.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@graphprotocol/graph-ts", [\ + ["npm:0.38.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@graphprotocol-graph-ts-npm-0.38.1-4a9fe9c395-10c0.zip/node_modules/@graphprotocol/graph-ts/",\ + "packageDependencies": [\ + ["@graphprotocol/graph-ts", "npm:0.38.1"],\ + ["assemblyscript", "npm:0.27.31"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/checkbox", [\ + ["npm:4.1.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-checkbox-npm-4.1.5-2a3ad0794f-10c0.zip/node_modules/@inquirer/checkbox/",\ + "packageDependencies": [\ + ["@inquirer/checkbox", "npm:4.1.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.5", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-checkbox-virtual-6bfeaaacd3/5/.yarn/berry/cache/@inquirer-checkbox-npm-4.1.5-2a3ad0794f-10c0.zip/node_modules/@inquirer/checkbox/",\ + "packageDependencies": [\ + ["@inquirer/checkbox", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.5"],\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/figures", "npm:1.0.11"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["ansi-escapes", "npm:4.3.2"],\ + ["yoctocolors-cjs", "npm:2.1.2"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/confirm", [\ + ["npm:5.1.9", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-confirm-npm-5.1.9-2231a186fd-10c0.zip/node_modules/@inquirer/confirm/",\ + "packageDependencies": [\ + ["@inquirer/confirm", "npm:5.1.9"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:5.1.9", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-confirm-virtual-bae667f4f2/5/.yarn/berry/cache/@inquirer-confirm-npm-5.1.9-2231a186fd-10c0.zip/node_modules/@inquirer/confirm/",\ + "packageDependencies": [\ + ["@inquirer/confirm", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:5.1.9"],\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/core", [\ + ["npm:10.1.10", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-core-npm-10.1.10-64e864e3cf-10c0.zip/node_modules/@inquirer/core/",\ + "packageDependencies": [\ + ["@inquirer/core", "npm:10.1.10"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-core-virtual-84fa6f1f05/5/.yarn/berry/cache/@inquirer-core-npm-10.1.10-64e864e3cf-10c0.zip/node_modules/@inquirer/core/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/figures", "npm:1.0.11"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["ansi-escapes", "npm:4.3.2"],\ + ["cli-width", "npm:4.1.0"],\ + ["mute-stream", "npm:2.0.0"],\ + ["signal-exit", "npm:4.1.0"],\ + ["wrap-ansi", "npm:6.2.0"],\ + ["yoctocolors-cjs", "npm:2.1.2"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/editor", [\ + ["npm:4.2.10", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-editor-npm-4.2.10-f21fcf6079-10c0.zip/node_modules/@inquirer/editor/",\ + "packageDependencies": [\ + ["@inquirer/editor", "npm:4.2.10"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.2.10", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-editor-virtual-87cf5283a7/5/.yarn/berry/cache/@inquirer-editor-npm-4.2.10-f21fcf6079-10c0.zip/node_modules/@inquirer/editor/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/editor", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.2.10"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["external-editor", "npm:3.1.0"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/expand", [\ + ["npm:4.0.12", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-expand-npm-4.0.12-8a67d29921-10c0.zip/node_modules/@inquirer/expand/",\ + "packageDependencies": [\ + ["@inquirer/expand", "npm:4.0.12"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-expand-virtual-964e2d97c9/5/.yarn/berry/cache/@inquirer-expand-npm-4.0.12-8a67d29921-10c0.zip/node_modules/@inquirer/expand/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/expand", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["yoctocolors-cjs", "npm:2.1.2"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/figures", [\ + ["npm:1.0.11", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-figures-npm-1.0.11-6cd9ee441b-10c0.zip/node_modules/@inquirer/figures/",\ + "packageDependencies": [\ + ["@inquirer/figures", "npm:1.0.11"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/input", [\ + ["npm:4.1.9", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-input-npm-4.1.9-3052131535-10c0.zip/node_modules/@inquirer/input/",\ + "packageDependencies": [\ + ["@inquirer/input", "npm:4.1.9"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.9", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-input-virtual-c6ce65b123/5/.yarn/berry/cache/@inquirer-input-npm-4.1.9-3052131535-10c0.zip/node_modules/@inquirer/input/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/input", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.9"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/number", [\ + ["npm:3.0.12", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-number-npm-3.0.12-3c031b6142-10c0.zip/node_modules/@inquirer/number/",\ + "packageDependencies": [\ + ["@inquirer/number", "npm:3.0.12"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:3.0.12", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-number-virtual-8dca886489/5/.yarn/berry/cache/@inquirer-number-npm-3.0.12-3c031b6142-10c0.zip/node_modules/@inquirer/number/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/number", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:3.0.12"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/password", [\ + ["npm:4.0.12", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-password-npm-4.0.12-4317147a5b-10c0.zip/node_modules/@inquirer/password/",\ + "packageDependencies": [\ + ["@inquirer/password", "npm:4.0.12"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-password-virtual-7d49d60226/5/.yarn/berry/cache/@inquirer-password-npm-4.0.12-4317147a5b-10c0.zip/node_modules/@inquirer/password/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/password", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["ansi-escapes", "npm:4.3.2"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/prompts", [\ + ["npm:7.4.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-prompts-npm-7.4.1-da0c278113-10c0.zip/node_modules/@inquirer/prompts/",\ + "packageDependencies": [\ + ["@inquirer/prompts", "npm:7.4.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:7cd0a83af92f2361230ca8aedf86ae0d0546ebf76e8df359de090e121ad33f2c769d4ab09a41a08c87e89db5f6708158b33b3d6c5f2744d798e2262db199e6ea#npm:7.4.1", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-prompts-virtual-f14d57f58e/5/.yarn/berry/cache/@inquirer-prompts-npm-7.4.1-da0c278113-10c0.zip/node_modules/@inquirer/prompts/",\ + "packageDependencies": [\ + ["@inquirer/checkbox", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.5"],\ + ["@inquirer/confirm", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:5.1.9"],\ + ["@inquirer/editor", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.2.10"],\ + ["@inquirer/expand", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12"],\ + ["@inquirer/input", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.9"],\ + ["@inquirer/number", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:3.0.12"],\ + ["@inquirer/password", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12"],\ + ["@inquirer/prompts", "virtual:7cd0a83af92f2361230ca8aedf86ae0d0546ebf76e8df359de090e121ad33f2c769d4ab09a41a08c87e89db5f6708158b33b3d6c5f2744d798e2262db199e6ea#npm:7.4.1"],\ + ["@inquirer/rawlist", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12"],\ + ["@inquirer/search", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:3.0.12"],\ + ["@inquirer/select", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.1"],\ + ["@types/node", null]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/rawlist", [\ + ["npm:4.0.12", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-rawlist-npm-4.0.12-066f1e4242-10c0.zip/node_modules/@inquirer/rawlist/",\ + "packageDependencies": [\ + ["@inquirer/rawlist", "npm:4.0.12"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-rawlist-virtual-55eea1bca1/5/.yarn/berry/cache/@inquirer-rawlist-npm-4.0.12-066f1e4242-10c0.zip/node_modules/@inquirer/rawlist/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/rawlist", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.0.12"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["yoctocolors-cjs", "npm:2.1.2"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/search", [\ + ["npm:3.0.12", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-search-npm-3.0.12-869d389020-10c0.zip/node_modules/@inquirer/search/",\ + "packageDependencies": [\ + ["@inquirer/search", "npm:3.0.12"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:3.0.12", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-search-virtual-ab69722a3b/5/.yarn/berry/cache/@inquirer-search-npm-3.0.12-869d389020-10c0.zip/node_modules/@inquirer/search/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/figures", "npm:1.0.11"],\ + ["@inquirer/search", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:3.0.12"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["yoctocolors-cjs", "npm:2.1.2"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/select", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-select-npm-4.1.1-d4cdb27ecf-10c0.zip/node_modules/@inquirer/select/",\ + "packageDependencies": [\ + ["@inquirer/select", "npm:4.1.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.1", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-select-virtual-ba0ddd0ac8/5/.yarn/berry/cache/@inquirer-select-npm-4.1.1-d4cdb27ecf-10c0.zip/node_modules/@inquirer/select/",\ + "packageDependencies": [\ + ["@inquirer/core", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:10.1.10"],\ + ["@inquirer/figures", "npm:1.0.11"],\ + ["@inquirer/select", "virtual:f14d57f58e2161929e220ab8ce7a571e2be75617d2ab0528eb9e7b5b585925be22da0c7e7d195e997f8d6e7ad659e23d0f0e9d7ffcdaf6ba2c8406fa00775fee#npm:4.1.1"],\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null],\ + ["ansi-escapes", "npm:4.3.2"],\ + ["yoctocolors-cjs", "npm:2.1.2"]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@inquirer/type", [\ + ["npm:3.0.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/@inquirer-type-npm-3.0.6-8d505d0258-10c0.zip/node_modules/@inquirer/type/",\ + "packageDependencies": [\ + ["@inquirer/type", "npm:3.0.6"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6", {\ + "packageLocation": "./.yarn/__virtual__/@inquirer-type-virtual-9228ebed6e/5/.yarn/berry/cache/@inquirer-type-npm-3.0.6-8d505d0258-10c0.zip/node_modules/@inquirer/type/",\ + "packageDependencies": [\ + ["@inquirer/type", "virtual:6bfeaaacd3814c10157c171cf175b041a30724264081b26d7461d99f94d004bcf2b35607bde1615f54be60618cca857f2f70c03913cd9a2a0a0abf24533e7fe5#npm:3.0.6"],\ + ["@types/node", null]\ + ],\ + "packagePeers": [\ + "@types/node"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ipld/dag-cbor", [\ + ["npm:9.2.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/@ipld-dag-cbor-npm-9.2.2-e8798a6acb-10c0.zip/node_modules/@ipld/dag-cbor/",\ + "packageDependencies": [\ + ["@ipld/dag-cbor", "npm:9.2.2"],\ + ["cborg", "npm:4.2.9"],\ + ["multiformats", "npm:13.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ipld/dag-json", [\ + ["npm:10.2.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/@ipld-dag-json-npm-10.2.3-cccc285dac-10c0.zip/node_modules/@ipld/dag-json/",\ + "packageDependencies": [\ + ["@ipld/dag-json", "npm:10.2.3"],\ + ["cborg", "npm:4.2.9"],\ + ["multiformats", "npm:13.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@ipld/dag-pb", [\ + ["npm:4.1.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/@ipld-dag-pb-npm-4.1.3-92efdeed41-10c0.zip/node_modules/@ipld/dag-pb/",\ + "packageDependencies": [\ + ["@ipld/dag-pb", "npm:4.1.3"],\ + ["multiformats", "npm:13.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@isaacs/cliui", [\ + ["npm:8.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-10c0.zip/node_modules/@isaacs/cliui/",\ + "packageDependencies": [\ + ["@isaacs/cliui", "npm:8.0.2"],\ + ["string-width", "npm:5.1.2"],\ + ["string-width-cjs", [\ + "string-width",\ + "npm:4.2.3"\ + ]],\ + ["strip-ansi", "npm:7.1.0"],\ + ["strip-ansi-cjs", [\ + "strip-ansi",\ + "npm:6.0.1"\ + ]],\ + ["wrap-ansi", "npm:8.1.0"],\ + ["wrap-ansi-cjs", [\ + "wrap-ansi",\ + "npm:7.0.0"\ + ]]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@leichtgewicht/ip-codec", [\ + ["npm:2.0.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/@leichtgewicht-ip-codec-npm-2.0.5-23deb9e4c5-10c0.zip/node_modules/@leichtgewicht/ip-codec/",\ + "packageDependencies": [\ + ["@leichtgewicht/ip-codec", "npm:2.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@libp2p/crypto", [\ + ["npm:5.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@libp2p-crypto-npm-5.1.0-2347e9b051-10c0.zip/node_modules/@libp2p/crypto/",\ + "packageDependencies": [\ + ["@libp2p/crypto", "npm:5.1.0"],\ + ["@libp2p/interface", "npm:2.8.0"],\ + ["@noble/curves", "npm:1.8.1"],\ + ["@noble/hashes", "npm:1.7.2"],\ + ["multiformats", "npm:13.3.2"],\ + ["protons-runtime", "npm:5.5.0"],\ + ["uint8arraylist", "npm:2.4.8"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@libp2p/interface", [\ + ["npm:2.8.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@libp2p-interface-npm-2.8.0-e7699ac577-10c0.zip/node_modules/@libp2p/interface/",\ + "packageDependencies": [\ + ["@libp2p/interface", "npm:2.8.0"],\ + ["@multiformats/multiaddr", "npm:12.4.0"],\ + ["it-pushable", "npm:3.2.3"],\ + ["it-stream-types", "npm:2.0.2"],\ + ["multiformats", "npm:13.3.2"],\ + ["progress-events", "npm:1.0.1"],\ + ["uint8arraylist", "npm:2.4.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@libp2p/logger", [\ + ["npm:5.1.14", {\ + "packageLocation": "../../../../.yarn/berry/cache/@libp2p-logger-npm-5.1.14-dcb8f804f5-10c0.zip/node_modules/@libp2p/logger/",\ + "packageDependencies": [\ + ["@libp2p/interface", "npm:2.8.0"],\ + ["@libp2p/logger", "npm:5.1.14"],\ + ["@multiformats/multiaddr", "npm:12.4.0"],\ + ["interface-datastore", "npm:8.3.1"],\ + ["multiformats", "npm:13.3.2"],\ + ["weald", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@libp2p/peer-id", [\ + ["npm:5.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@libp2p-peer-id-npm-5.1.1-3826f9387d-10c0.zip/node_modules/@libp2p/peer-id/",\ + "packageDependencies": [\ + ["@libp2p/crypto", "npm:5.1.0"],\ + ["@libp2p/interface", "npm:2.8.0"],\ + ["@libp2p/peer-id", "npm:5.1.1"],\ + ["multiformats", "npm:13.3.2"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@multiformats/dns", [\ + ["npm:1.0.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/@multiformats-dns-npm-1.0.6-8e9c74f777-10c0.zip/node_modules/@multiformats/dns/",\ + "packageDependencies": [\ + ["@multiformats/dns", "npm:1.0.6"],\ + ["@types/dns-packet", "npm:5.6.5"],\ + ["buffer", "npm:6.0.3"],\ + ["dns-packet", "npm:5.6.1"],\ + ["hashlru", "npm:2.3.0"],\ + ["p-queue", "npm:8.1.0"],\ + ["progress-events", "npm:1.0.1"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@multiformats/multiaddr", [\ + ["npm:12.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@multiformats-multiaddr-npm-12.4.0-027c099f16-10c0.zip/node_modules/@multiformats/multiaddr/",\ + "packageDependencies": [\ + ["@chainsafe/is-ip", "npm:2.1.0"],\ + ["@chainsafe/netmask", "npm:2.0.0"],\ + ["@multiformats/dns", "npm:1.0.6"],\ + ["@multiformats/multiaddr", "npm:12.4.0"],\ + ["multiformats", "npm:13.3.2"],\ + ["uint8-varint", "npm:2.0.4"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@multiformats/multiaddr-to-uri", [\ + ["npm:11.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@multiformats-multiaddr-to-uri-npm-11.0.0-555f8b85c2-10c0.zip/node_modules/@multiformats/multiaddr-to-uri/",\ + "packageDependencies": [\ + ["@multiformats/multiaddr", "npm:12.4.0"],\ + ["@multiformats/multiaddr-to-uri", "npm:11.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@noble/curves", [\ + ["npm:1.4.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/@noble-curves-npm-1.4.2-6f76b01394-10c0.zip/node_modules/@noble/curves/",\ + "packageDependencies": [\ + ["@noble/curves", "npm:1.4.2"],\ + ["@noble/hashes", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.8.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@noble-curves-npm-1.8.1-6957ffa693-10c0.zip/node_modules/@noble/curves/",\ + "packageDependencies": [\ + ["@noble/curves", "npm:1.8.1"],\ + ["@noble/hashes", "npm:1.7.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@noble/hashes", [\ + ["npm:1.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@noble-hashes-npm-1.4.0-9389282fd6-10c0.zip/node_modules/@noble/hashes/",\ + "packageDependencies": [\ + ["@noble/hashes", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.7.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@noble-hashes-npm-1.7.1-4106ab26c5-10c0.zip/node_modules/@noble/hashes/",\ + "packageDependencies": [\ + ["@noble/hashes", "npm:1.7.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.7.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/@noble-hashes-npm-1.7.2-1f8581843d-10c0.zip/node_modules/@noble/hashes/",\ + "packageDependencies": [\ + ["@noble/hashes", "npm:1.7.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.scandir", [\ + ["npm:2.1.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/@nodelib-fs.scandir-npm-2.1.5-89c67370dd-10c0.zip/node_modules/@nodelib/fs.scandir/",\ + "packageDependencies": [\ + ["@nodelib/fs.scandir", "npm:2.1.5"],\ + ["@nodelib/fs.stat", "npm:2.0.5"],\ + ["run-parallel", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.stat", [\ + ["npm:2.0.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/@nodelib-fs.stat-npm-2.0.5-01f4dd3030-10c0.zip/node_modules/@nodelib/fs.stat/",\ + "packageDependencies": [\ + ["@nodelib/fs.stat", "npm:2.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@nodelib/fs.walk", [\ + ["npm:1.2.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/@nodelib-fs.walk-npm-1.2.8-b4a89da548-10c0.zip/node_modules/@nodelib/fs.walk/",\ + "packageDependencies": [\ + ["@nodelib/fs.scandir", "npm:2.1.5"],\ + ["@nodelib/fs.walk", "npm:1.2.8"],\ + ["fastq", "npm:1.19.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@oclif/core", [\ + ["npm:4.2.10", {\ + "packageLocation": "../../../../.yarn/berry/cache/@oclif-core-npm-4.2.10-7f5c9d207d-10c0.zip/node_modules/@oclif/core/",\ + "packageDependencies": [\ + ["@oclif/core", "npm:4.2.10"],\ + ["ansi-escapes", "npm:4.3.2"],\ + ["ansis", "npm:3.17.0"],\ + ["clean-stack", "npm:3.0.1"],\ + ["cli-spinners", "npm:2.9.2"],\ + ["debug", "virtual:038a249f2aa88aa461f6ee4e025a4e69882818f46f6991ea14771b55239590deb9be47edb75d44b0a71fdbf66201ed3774a5133042e1947d8f6c87dedc514c7e#npm:4.4.0"],\ + ["ejs", "npm:3.1.10"],\ + ["get-package-type", "npm:0.1.0"],\ + ["globby", "npm:11.1.0"],\ + ["indent-string", "npm:4.0.0"],\ + ["is-wsl", "npm:2.2.0"],\ + ["lilconfig", "npm:3.1.3"],\ + ["minimatch", "npm:9.0.5"],\ + ["semver", "npm:7.7.1"],\ + ["string-width", "npm:4.2.3"],\ + ["supports-color", "npm:8.1.1"],\ + ["widest-line", "npm:3.1.0"],\ + ["wordwrap", "npm:1.0.0"],\ + ["wrap-ansi", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@oclif-core-npm-4.3.0-038a249f2a-10c0.zip/node_modules/@oclif/core/",\ + "packageDependencies": [\ + ["@oclif/core", "npm:4.3.0"],\ + ["ansi-escapes", "npm:4.3.2"],\ + ["ansis", "npm:3.17.0"],\ + ["clean-stack", "npm:3.0.1"],\ + ["cli-spinners", "npm:2.9.2"],\ + ["debug", "virtual:038a249f2aa88aa461f6ee4e025a4e69882818f46f6991ea14771b55239590deb9be47edb75d44b0a71fdbf66201ed3774a5133042e1947d8f6c87dedc514c7e#npm:4.4.0"],\ + ["ejs", "npm:3.1.10"],\ + ["get-package-type", "npm:0.1.0"],\ + ["globby", "npm:11.1.0"],\ + ["indent-string", "npm:4.0.0"],\ + ["is-wsl", "npm:2.2.0"],\ + ["lilconfig", "npm:3.1.3"],\ + ["minimatch", "npm:9.0.5"],\ + ["semver", "npm:7.7.1"],\ + ["string-width", "npm:4.2.3"],\ + ["supports-color", "npm:8.1.1"],\ + ["widest-line", "npm:3.1.0"],\ + ["wordwrap", "npm:1.0.0"],\ + ["wrap-ansi", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@oclif/plugin-autocomplete", [\ + ["npm:3.2.27", {\ + "packageLocation": "../../../../.yarn/berry/cache/@oclif-plugin-autocomplete-npm-3.2.27-33b35de7a2-10c0.zip/node_modules/@oclif/plugin-autocomplete/",\ + "packageDependencies": [\ + ["@oclif/core", "npm:4.2.10"],\ + ["@oclif/plugin-autocomplete", "npm:3.2.27"],\ + ["ansis", "npm:3.17.0"],\ + ["debug", "virtual:33b35de7a2633f80dae8f80fdea6ac2d060de71e6f3f69ccbcd31b13d0843b941a76219401f479874cd9df85f5b2a2d5a53156bf01580f389de0d863dbff92ea#npm:4.4.0"],\ + ["ejs", "npm:3.1.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@oclif/plugin-not-found", [\ + ["npm:3.2.49", {\ + "packageLocation": "../../../../.yarn/berry/cache/@oclif-plugin-not-found-npm-3.2.49-7cd0a83af9-10c0.zip/node_modules/@oclif/plugin-not-found/",\ + "packageDependencies": [\ + ["@inquirer/prompts", "virtual:7cd0a83af92f2361230ca8aedf86ae0d0546ebf76e8df359de090e121ad33f2c769d4ab09a41a08c87e89db5f6708158b33b3d6c5f2744d798e2262db199e6ea#npm:7.4.1"],\ + ["@oclif/core", "npm:4.2.10"],\ + ["@oclif/plugin-not-found", "npm:3.2.49"],\ + ["ansis", "npm:3.17.0"],\ + ["fast-levenshtein", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@oclif/plugin-warn-if-update-available", [\ + ["npm:3.1.38", {\ + "packageLocation": "../../../../.yarn/berry/cache/@oclif-plugin-warn-if-update-available-npm-3.1.38-03aeeb978d-10c0.zip/node_modules/@oclif/plugin-warn-if-update-available/",\ + "packageDependencies": [\ + ["@oclif/core", "npm:4.2.10"],\ + ["@oclif/plugin-warn-if-update-available", "npm:3.1.38"],\ + ["ansis", "npm:3.17.0"],\ + ["debug", "virtual:33b35de7a2633f80dae8f80fdea6ac2d060de71e6f3f69ccbcd31b13d0843b941a76219401f479874cd9df85f5b2a2d5a53156bf01580f389de0d863dbff92ea#npm:4.4.0"],\ + ["http-call", "npm:5.3.0"],\ + ["lodash", "npm:4.17.21"],\ + ["registry-auth-token", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@pinax/graph-networks-registry", [\ + ["npm:0.6.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/@pinax-graph-networks-registry-npm-0.6.7-d662aa5f37-10c0.zip/node_modules/@pinax/graph-networks-registry/",\ + "packageDependencies": [\ + ["@pinax/graph-networks-registry", "npm:0.6.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@pnpm/config.env-replace", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@pnpm-config.env-replace-npm-1.1.0-cd7057bf65-10c0.zip/node_modules/@pnpm/config.env-replace/",\ + "packageDependencies": [\ + ["@pnpm/config.env-replace", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@pnpm/network.ca-file", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/@pnpm-network.ca-file-npm-1.0.2-5faaf6e6bf-10c0.zip/node_modules/@pnpm/network.ca-file/",\ + "packageDependencies": [\ + ["@pnpm/network.ca-file", "npm:1.0.2"],\ + ["graceful-fs", "npm:4.2.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@pnpm/npm-conf", [\ + ["npm:2.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@pnpm-npm-conf-npm-2.3.1-6c7cfac5b4-10c0.zip/node_modules/@pnpm/npm-conf/",\ + "packageDependencies": [\ + ["@pnpm/config.env-replace", "npm:1.1.0"],\ + ["@pnpm/network.ca-file", "npm:1.0.2"],\ + ["@pnpm/npm-conf", "npm:2.3.1"],\ + ["config-chain", "npm:1.1.13"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@rescript/std", [\ + ["npm:9.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@rescript-std-npm-9.0.0-29ba790713-10c0.zip/node_modules/@rescript/std/",\ + "packageDependencies": [\ + ["@rescript/std", "npm:9.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@scure/base", [\ + ["npm:1.1.9", {\ + "packageLocation": "../../../../.yarn/berry/cache/@scure-base-npm-1.1.9-75a8521e88-10c0.zip/node_modules/@scure/base/",\ + "packageDependencies": [\ + ["@scure/base", "npm:1.1.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@scure/bip32", [\ + ["npm:1.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@scure-bip32-npm-1.4.0-95f7513221-10c0.zip/node_modules/@scure/bip32/",\ + "packageDependencies": [\ + ["@noble/curves", "npm:1.4.2"],\ + ["@noble/hashes", "npm:1.4.0"],\ + ["@scure/base", "npm:1.1.9"],\ + ["@scure/bip32", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@scure/bip39", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@scure-bip39-npm-1.3.0-1d74c5c469-10c0.zip/node_modules/@scure/bip39/",\ + "packageDependencies": [\ + ["@noble/hashes", "npm:1.4.0"],\ + ["@scure/base", "npm:1.1.9"],\ + ["@scure/bip39", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/connect", [\ + ["npm:3.4.38", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-connect-npm-3.4.38-a8a4c38337-10c0.zip/node_modules/@types/connect/",\ + "packageDependencies": [\ + ["@types/connect", "npm:3.4.38"],\ + ["@types/node", "npm:22.14.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/dns-packet", [\ + ["npm:5.6.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-dns-packet-npm-5.6.5-40d34c42a7-10c0.zip/node_modules/@types/dns-packet/",\ + "packageDependencies": [\ + ["@types/dns-packet", "npm:5.6.5"],\ + ["@types/node", "npm:22.14.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/node", [\ + ["npm:12.20.55", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-node-npm-12.20.55-88487587a4-10c0.zip/node_modules/@types/node/",\ + "packageDependencies": [\ + ["@types/node", "npm:12.20.55"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:22.14.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-node-npm-22.14.1-ff7e0a29d7-10c0.zip/node_modules/@types/node/",\ + "packageDependencies": [\ + ["@types/node", "npm:22.14.1"],\ + ["undici-types", "npm:6.21.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/parse-json", [\ + ["npm:4.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-parse-json-npm-4.0.2-f87f65692e-10c0.zip/node_modules/@types/parse-json/",\ + "packageDependencies": [\ + ["@types/parse-json", "npm:4.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@types/ws", [\ + ["npm:7.4.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/@types-ws-npm-7.4.7-d0c95c0958-10c0.zip/node_modules/@types/ws/",\ + "packageDependencies": [\ + ["@types/node", "npm:22.14.1"],\ + ["@types/ws", "npm:7.4.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@whatwg-node/disposablestack", [\ + ["npm:0.0.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/@whatwg-node-disposablestack-npm-0.0.6-dc91d7f995-10c0.zip/node_modules/@whatwg-node/disposablestack/",\ + "packageDependencies": [\ + ["@whatwg-node/disposablestack", "npm:0.0.6"],\ + ["@whatwg-node/promise-helpers", "npm:1.3.0"],\ + ["tslib", "npm:2.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@whatwg-node/fetch", [\ + ["npm:0.10.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/@whatwg-node-fetch-npm-0.10.5-d16ca50505-10c0.zip/node_modules/@whatwg-node/fetch/",\ + "packageDependencies": [\ + ["@whatwg-node/fetch", "npm:0.10.5"],\ + ["@whatwg-node/node-fetch", "npm:0.7.17"],\ + ["urlpattern-polyfill", "npm:10.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@whatwg-node/node-fetch", [\ + ["npm:0.7.17", {\ + "packageLocation": "../../../../.yarn/berry/cache/@whatwg-node-node-fetch-npm-0.7.17-fc57260d12-10c0.zip/node_modules/@whatwg-node/node-fetch/",\ + "packageDependencies": [\ + ["@whatwg-node/disposablestack", "npm:0.0.6"],\ + ["@whatwg-node/node-fetch", "npm:0.7.17"],\ + ["@whatwg-node/promise-helpers", "npm:1.3.0"],\ + ["busboy", "npm:1.6.0"],\ + ["tslib", "npm:2.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["@whatwg-node/promise-helpers", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/@whatwg-node-promise-helpers-npm-1.3.0-075bf9eecc-10c0.zip/node_modules/@whatwg-node/promise-helpers/",\ + "packageDependencies": [\ + ["@whatwg-node/promise-helpers", "npm:1.3.0"],\ + ["tslib", "npm:2.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["abitype", [\ + ["npm:0.7.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/abitype-npm-0.7.1-b30f086406-10c0.zip/node_modules/abitype/",\ + "packageDependencies": [\ + ["abitype", "npm:0.7.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:2b7a942e757a4401915eb95f023a945e0bd0cb31b5e31db6d67a19c7d14a3118a04af5737ef7325d5f78e592c5a496624023825d09bdee88fec0c763359a8a06#npm:0.7.1", {\ + "packageLocation": "./.yarn/__virtual__/abitype-virtual-4b3b0ab58d/5/.yarn/berry/cache/abitype-npm-0.7.1-b30f086406-10c0.zip/node_modules/abitype/",\ + "packageDependencies": [\ + ["@types/typescript", null],\ + ["@types/zod", null],\ + ["abitype", "virtual:2b7a942e757a4401915eb95f023a945e0bd0cb31b5e31db6d67a19c7d14a3118a04af5737ef7325d5f78e592c5a496624023825d09bdee88fec0c763359a8a06#npm:0.7.1"],\ + ["typescript", null],\ + ["zod", null]\ + ],\ + "packagePeers": [\ + "@types/typescript",\ + "@types/zod",\ + "typescript",\ + "zod"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-colors", [\ + ["npm:4.1.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-colors-npm-4.1.3-8ffd0ae6c7-10c0.zip/node_modules/ansi-colors/",\ + "packageDependencies": [\ + ["ansi-colors", "npm:4.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-escapes", [\ + ["npm:4.3.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-escapes-npm-4.3.2-3ad173702f-10c0.zip/node_modules/ansi-escapes/",\ + "packageDependencies": [\ + ["ansi-escapes", "npm:4.3.2"],\ + ["type-fest", "npm:0.21.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-regex", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-regex-npm-4.1.1-af0a582bb9-10c0.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-regex-npm-5.0.1-c963a48615-10c0.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-regex-npm-6.1.0-abe011aae4-10c0.zip/node_modules/ansi-regex/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:6.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansi-styles", [\ + ["npm:3.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-styles-npm-3.2.1-8cb8107983-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:3.2.1"],\ + ["color-convert", "npm:1.9.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-styles-npm-4.3.0-245c7d42c7-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["color-convert", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansi-styles-npm-6.2.1-d43647018c-10c0.zip/node_modules/ansi-styles/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ansis", [\ + ["npm:3.17.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/ansis-npm-3.17.0-eca2c0d0c2-10c0.zip/node_modules/ansis/",\ + "packageDependencies": [\ + ["ansis", "npm:3.17.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["any-signal", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/any-signal-npm-4.1.1-ffc90d3b2e-10c0.zip/node_modules/any-signal/",\ + "packageDependencies": [\ + ["any-signal", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["apisauce", [\ + ["npm:2.1.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/apisauce-npm-2.1.6-6d66461ebc-10c0.zip/node_modules/apisauce/",\ + "packageDependencies": [\ + ["apisauce", "npm:2.1.6"],\ + ["axios", "npm:0.21.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["app-module-path", [\ + ["npm:2.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/app-module-path-npm-2.2.0-71fdc42bce-10c0.zip/node_modules/app-module-path/",\ + "packageDependencies": [\ + ["app-module-path", "npm:2.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["argparse", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/argparse-npm-2.0.1-faff7999e6-10c0.zip/node_modules/argparse/",\ + "packageDependencies": [\ + ["argparse", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["array-union", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/array-union-npm-2.1.0-4e4852b221-10c0.zip/node_modules/array-union/",\ + "packageDependencies": [\ + ["array-union", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["assemblyscript", [\ + ["npm:0.19.23", {\ + "packageLocation": "../../../../.yarn/berry/cache/assemblyscript-npm-0.19.23-d726685734-10c0.zip/node_modules/assemblyscript/",\ + "packageDependencies": [\ + ["assemblyscript", "npm:0.19.23"],\ + ["binaryen", "npm:102.0.0-nightly.20211028"],\ + ["long", "npm:5.3.1"],\ + ["source-map-support", "npm:0.5.21"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.27.31", {\ + "packageLocation": "../../../../.yarn/berry/cache/assemblyscript-npm-0.27.31-9ef13956cb-10c0.zip/node_modules/assemblyscript/",\ + "packageDependencies": [\ + ["assemblyscript", "npm:0.27.31"],\ + ["binaryen", "npm:116.0.0-nightly.20240114"],\ + ["long", "npm:5.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["async", [\ + ["npm:3.2.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/async-npm-3.2.6-aa4f5aa081-10c0.zip/node_modules/async/",\ + "packageDependencies": [\ + ["async", "npm:3.2.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["available-typed-arrays", [\ + ["npm:1.0.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/available-typed-arrays-npm-1.0.7-e5e5d79687-10c0.zip/node_modules/available-typed-arrays/",\ + "packageDependencies": [\ + ["available-typed-arrays", "npm:1.0.7"],\ + ["possible-typed-array-names", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["axios", [\ + ["npm:0.21.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/axios-npm-0.21.4-e278873748-10c0.zip/node_modules/axios/",\ + "packageDependencies": [\ + ["axios", "npm:0.21.4"],\ + ["follow-redirects", "virtual:e278873748b4e9d158db595d2f6cb0351c74052f52b53924aec4d9299e7b6babfb62aead374cf2f6e453bc8bea3b052380dc6b1137a162bbfc102bbb1c8cac42#npm:1.15.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["balanced-match", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/balanced-match-npm-1.0.2-a53c126459-10c0.zip/node_modules/balanced-match/",\ + "packageDependencies": [\ + ["balanced-match", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["base64-js", [\ + ["npm:1.5.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/base64-js-npm-1.5.1-b2f7275641-10c0.zip/node_modules/base64-js/",\ + "packageDependencies": [\ + ["base64-js", "npm:1.5.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["binaryen", [\ + ["npm:102.0.0-nightly.20211028", {\ + "packageLocation": "../../../../.yarn/berry/cache/binaryen-npm-102.0.0-nightly.20211028-ba1465b905-10c0.zip/node_modules/binaryen/",\ + "packageDependencies": [\ + ["binaryen", "npm:102.0.0-nightly.20211028"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:116.0.0-nightly.20240114", {\ + "packageLocation": "../../../../.yarn/berry/cache/binaryen-npm-116.0.0-nightly.20240114-307b617409-10c0.zip/node_modules/binaryen/",\ + "packageDependencies": [\ + ["binaryen", "npm:116.0.0-nightly.20240114"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["blob-to-it", [\ + ["npm:2.0.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/blob-to-it-npm-2.0.8-c7e94c0bbc-10c0.zip/node_modules/blob-to-it/",\ + "packageDependencies": [\ + ["blob-to-it", "npm:2.0.8"],\ + ["browser-readablestream-to-it", "npm:2.0.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["brace-expansion", [\ + ["npm:1.1.11", {\ + "packageLocation": "../../../../.yarn/berry/cache/brace-expansion-npm-1.1.11-fb95eb05ad-10c0.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["balanced-match", "npm:1.0.2"],\ + ["brace-expansion", "npm:1.1.11"],\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/brace-expansion-npm-2.0.1-17aa2616f9-10c0.zip/node_modules/brace-expansion/",\ + "packageDependencies": [\ + ["balanced-match", "npm:1.0.2"],\ + ["brace-expansion", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["braces", [\ + ["npm:3.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/braces-npm-3.0.3-582c14023c-10c0.zip/node_modules/braces/",\ + "packageDependencies": [\ + ["braces", "npm:3.0.3"],\ + ["fill-range", "npm:7.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["browser-readablestream-to-it", [\ + ["npm:2.0.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/browser-readablestream-to-it-npm-2.0.8-76aa9cffc4-10c0.zip/node_modules/browser-readablestream-to-it/",\ + "packageDependencies": [\ + ["browser-readablestream-to-it", "npm:2.0.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["buffer", [\ + ["npm:6.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/buffer-npm-6.0.3-cd90dfedfe-10c0.zip/node_modules/buffer/",\ + "packageDependencies": [\ + ["base64-js", "npm:1.5.1"],\ + ["buffer", "npm:6.0.3"],\ + ["ieee754", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["buffer-from", [\ + ["npm:1.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/buffer-from-npm-1.1.2-03d2f20d7e-10c0.zip/node_modules/buffer-from/",\ + "packageDependencies": [\ + ["buffer-from", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["bundle-name", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/bundle-name-npm-4.1.0-4688335533-10c0.zip/node_modules/bundle-name/",\ + "packageDependencies": [\ + ["bundle-name", "npm:4.1.0"],\ + ["run-applescript", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["busboy", [\ + ["npm:1.6.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/busboy-npm-1.6.0-ebb5cbb04b-10c0.zip/node_modules/busboy/",\ + "packageDependencies": [\ + ["busboy", "npm:1.6.0"],\ + ["streamsearch", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["call-bind", [\ + ["npm:1.0.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/call-bind-npm-1.0.8-4145a20621-10c0.zip/node_modules/call-bind/",\ + "packageDependencies": [\ + ["call-bind", "npm:1.0.8"],\ + ["call-bind-apply-helpers", "npm:1.0.2"],\ + ["es-define-property", "npm:1.0.1"],\ + ["get-intrinsic", "npm:1.3.0"],\ + ["set-function-length", "npm:1.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["call-bind-apply-helpers", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/call-bind-apply-helpers-npm-1.0.2-3eedbea3bb-10c0.zip/node_modules/call-bind-apply-helpers/",\ + "packageDependencies": [\ + ["call-bind-apply-helpers", "npm:1.0.2"],\ + ["es-errors", "npm:1.3.0"],\ + ["function-bind", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["call-bound", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/call-bound-npm-1.0.4-359cfa32c7-10c0.zip/node_modules/call-bound/",\ + "packageDependencies": [\ + ["call-bind-apply-helpers", "npm:1.0.2"],\ + ["call-bound", "npm:1.0.4"],\ + ["get-intrinsic", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["callsites", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/callsites-npm-3.1.0-268f989910-10c0.zip/node_modules/callsites/",\ + "packageDependencies": [\ + ["callsites", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cborg", [\ + ["npm:4.2.9", {\ + "packageLocation": "../../../../.yarn/berry/cache/cborg-npm-4.2.9-d48ab0f6cf-10c0.zip/node_modules/cborg/",\ + "packageDependencies": [\ + ["cborg", "npm:4.2.9"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chalk", [\ + ["npm:2.4.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/chalk-npm-2.4.2-3ea16dd91e-10c0.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:3.2.1"],\ + ["chalk", "npm:2.4.2"],\ + ["escape-string-regexp", "npm:1.0.5"],\ + ["supports-color", "npm:5.5.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/chalk-npm-4.1.2-ba8b67ab80-10c0.zip/node_modules/chalk/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["chalk", "npm:4.1.2"],\ + ["supports-color", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chardet", [\ + ["npm:0.7.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/chardet-npm-0.7.0-27933dd6c7-10c0.zip/node_modules/chardet/",\ + "packageDependencies": [\ + ["chardet", "npm:0.7.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["chokidar", [\ + ["npm:4.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/chokidar-npm-4.0.3-962354fbb4-10c0.zip/node_modules/chokidar/",\ + "packageDependencies": [\ + ["chokidar", "npm:4.0.3"],\ + ["readdirp", "npm:4.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["clean-stack", [\ + ["npm:3.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/clean-stack-npm-3.0.1-85c3878b76-10c0.zip/node_modules/clean-stack/",\ + "packageDependencies": [\ + ["clean-stack", "npm:3.0.1"],\ + ["escape-string-regexp", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cli-cursor", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/cli-cursor-npm-3.1.0-fee1e46b5e-10c0.zip/node_modules/cli-cursor/",\ + "packageDependencies": [\ + ["cli-cursor", "npm:3.1.0"],\ + ["restore-cursor", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cli-spinners", [\ + ["npm:2.9.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/cli-spinners-npm-2.9.2-be9c08efee-10c0.zip/node_modules/cli-spinners/",\ + "packageDependencies": [\ + ["cli-spinners", "npm:2.9.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cli-table3", [\ + ["npm:0.6.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/cli-table3-npm-0.6.0-049737be8a-10c0.zip/node_modules/cli-table3/",\ + "packageDependencies": [\ + ["cli-table3", "npm:0.6.0"],\ + ["colors", "npm:1.4.0"],\ + ["object-assign", "npm:4.1.1"],\ + ["string-width", "npm:4.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cli-width", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/cli-width-npm-4.1.0-c08b53be83-10c0.zip/node_modules/cli-width/",\ + "packageDependencies": [\ + ["cli-width", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["clone", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/clone-npm-1.0.4-a610fcbcf9-10c0.zip/node_modules/clone/",\ + "packageDependencies": [\ + ["clone", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-convert", [\ + ["npm:1.9.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/color-convert-npm-1.9.3-1fe690075e-10c0.zip/node_modules/color-convert/",\ + "packageDependencies": [\ + ["color-convert", "npm:1.9.3"],\ + ["color-name", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/color-convert-npm-2.0.1-79730e935b-10c0.zip/node_modules/color-convert/",\ + "packageDependencies": [\ + ["color-convert", "npm:2.0.1"],\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["color-name", [\ + ["npm:1.1.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/color-name-npm-1.1.3-728b7b5d39-10c0.zip/node_modules/color-name/",\ + "packageDependencies": [\ + ["color-name", "npm:1.1.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:1.1.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/color-name-npm-1.1.4-025792b0ea-10c0.zip/node_modules/color-name/",\ + "packageDependencies": [\ + ["color-name", "npm:1.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["colors", [\ + ["npm:1.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/colors-npm-1.4.0-7e2cf12234-10c0.zip/node_modules/colors/",\ + "packageDependencies": [\ + ["colors", "npm:1.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["commander", [\ + ["npm:2.20.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/commander-npm-2.20.3-d8dcbaa39b-10c0.zip/node_modules/commander/",\ + "packageDependencies": [\ + ["commander", "npm:2.20.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["concat-map", [\ + ["npm:0.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/concat-map-npm-0.0.1-85a921b7ee-10c0.zip/node_modules/concat-map/",\ + "packageDependencies": [\ + ["concat-map", "npm:0.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["config-chain", [\ + ["npm:1.1.13", {\ + "packageLocation": "../../../../.yarn/berry/cache/config-chain-npm-1.1.13-82e06afbc4-10c0.zip/node_modules/config-chain/",\ + "packageDependencies": [\ + ["config-chain", "npm:1.1.13"],\ + ["ini", "npm:1.3.8"],\ + ["proto-list", "npm:1.2.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["content-type", [\ + ["npm:1.0.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/content-type-npm-1.0.5-3e037bf9ab-10c0.zip/node_modules/content-type/",\ + "packageDependencies": [\ + ["content-type", "npm:1.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cosmiconfig", [\ + ["npm:7.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/cosmiconfig-npm-7.0.1-dd19ae2403-10c0.zip/node_modules/cosmiconfig/",\ + "packageDependencies": [\ + ["@types/parse-json", "npm:4.0.2"],\ + ["cosmiconfig", "npm:7.0.1"],\ + ["import-fresh", "npm:3.3.1"],\ + ["parse-json", "npm:5.2.0"],\ + ["path-type", "npm:4.0.0"],\ + ["yaml", "npm:1.10.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["cross-spawn", [\ + ["npm:7.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-10c0.zip/node_modules/cross-spawn/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.3"],\ + ["path-key", "npm:3.1.1"],\ + ["shebang-command", "npm:2.0.0"],\ + ["which", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.0.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/cross-spawn-npm-7.0.6-264bddf921-10c0.zip/node_modules/cross-spawn/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.6"],\ + ["path-key", "npm:3.1.1"],\ + ["shebang-command", "npm:2.0.0"],\ + ["which", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["dag-jose", [\ + ["npm:5.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/dag-jose-npm-5.1.1-445db8bde9-10c0.zip/node_modules/dag-jose/",\ + "packageDependencies": [\ + ["@ipld/dag-cbor", "npm:9.2.2"],\ + ["dag-jose", "npm:5.1.1"],\ + ["multiformats", "npm:13.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["debug", [\ + ["npm:4.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/debug-npm-4.4.0-f6efe76023-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "npm:4.4.0"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["npm:4.4.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/debug-npm-4.4.1-6eab84b9f7-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["debug", "npm:4.4.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:038a249f2aa88aa461f6ee4e025a4e69882818f46f6991ea14771b55239590deb9be47edb75d44b0a71fdbf66201ed3774a5133042e1947d8f6c87dedc514c7e#npm:4.4.0", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-4c8c298c10/5/.yarn/berry/cache/debug-npm-4.4.0-f6efe76023-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["@types/supports-color", null],\ + ["debug", "virtual:038a249f2aa88aa461f6ee4e025a4e69882818f46f6991ea14771b55239590deb9be47edb75d44b0a71fdbf66201ed3774a5133042e1947d8f6c87dedc514c7e#npm:4.4.0"],\ + ["ms", "npm:2.1.3"],\ + ["supports-color", "npm:8.1.1"]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:33b35de7a2633f80dae8f80fdea6ac2d060de71e6f3f69ccbcd31b13d0843b941a76219401f479874cd9df85f5b2a2d5a53156bf01580f389de0d863dbff92ea#npm:4.4.0", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-f8e2c4684a/5/.yarn/berry/cache/debug-npm-4.4.0-f6efe76023-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["@types/supports-color", null],\ + ["debug", "virtual:33b35de7a2633f80dae8f80fdea6ac2d060de71e6f3f69ccbcd31b13d0843b941a76219401f479874cd9df85f5b2a2d5a53156bf01580f389de0d863dbff92ea#npm:4.4.0"],\ + ["ms", "npm:2.1.3"],\ + ["supports-color", null]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ + }],\ + ["virtual:9a3d322be2797a27a5fbdb9bd5b645c0201175c9417fe939ee34ed2edda2250d47f66dbd6a10f44eac51090d5cd043dbff3a660408a14db40b7f1bc46b5effd3#npm:4.4.1", {\ + "packageLocation": "./.yarn/__virtual__/debug-virtual-b7eef1bc18/5/.yarn/berry/cache/debug-npm-4.4.1-6eab84b9f7-10c0.zip/node_modules/debug/",\ + "packageDependencies": [\ + ["@types/supports-color", null],\ + ["debug", "virtual:9a3d322be2797a27a5fbdb9bd5b645c0201175c9417fe939ee34ed2edda2250d47f66dbd6a10f44eac51090d5cd043dbff3a660408a14db40b7f1bc46b5effd3#npm:4.4.1"],\ + ["ms", "npm:2.1.3"],\ + ["supports-color", null]\ + ],\ + "packagePeers": [\ + "@types/supports-color",\ + "supports-color"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["default-browser", [\ + ["npm:5.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/default-browser-npm-5.2.1-e2f8bca718-10c0.zip/node_modules/default-browser/",\ + "packageDependencies": [\ + ["bundle-name", "npm:4.1.0"],\ + ["default-browser", "npm:5.2.1"],\ + ["default-browser-id", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["default-browser-id", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/default-browser-id-npm-5.0.0-41fa64d5bb-10c0.zip/node_modules/default-browser-id/",\ + "packageDependencies": [\ + ["default-browser-id", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["defaults", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/defaults-npm-1.0.4-f3fbaf2528-10c0.zip/node_modules/defaults/",\ + "packageDependencies": [\ + ["clone", "npm:1.0.4"],\ + ["defaults", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["define-data-property", [\ + ["npm:1.1.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/define-data-property-npm-1.1.4-4cbd8efc51-10c0.zip/node_modules/define-data-property/",\ + "packageDependencies": [\ + ["define-data-property", "npm:1.1.4"],\ + ["es-define-property", "npm:1.0.1"],\ + ["es-errors", "npm:1.3.0"],\ + ["gopd", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["define-lazy-prop", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/define-lazy-prop-npm-3.0.0-6bb0fc1510-10c0.zip/node_modules/define-lazy-prop/",\ + "packageDependencies": [\ + ["define-lazy-prop", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["delay", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/delay-npm-5.0.0-1d1c758b46-10c0.zip/node_modules/delay/",\ + "packageDependencies": [\ + ["delay", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["dir-glob", [\ + ["npm:3.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/dir-glob-npm-3.0.1-1aea628b1b-10c0.zip/node_modules/dir-glob/",\ + "packageDependencies": [\ + ["dir-glob", "npm:3.0.1"],\ + ["path-type", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["dns-packet", [\ + ["npm:5.6.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/dns-packet-npm-5.6.1-9543a780b5-10c0.zip/node_modules/dns-packet/",\ + "packageDependencies": [\ + ["@leichtgewicht/ip-codec", "npm:2.0.5"],\ + ["dns-packet", "npm:5.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["docker-compose", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/docker-compose-npm-1.2.0-f7d3c775ab-10c0.zip/node_modules/docker-compose/",\ + "packageDependencies": [\ + ["docker-compose", "npm:1.2.0"],\ + ["yaml", "npm:2.7.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["dunder-proto", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/dunder-proto-npm-1.0.1-90eb6829db-10c0.zip/node_modules/dunder-proto/",\ + "packageDependencies": [\ + ["call-bind-apply-helpers", "npm:1.0.2"],\ + ["dunder-proto", "npm:1.0.1"],\ + ["es-errors", "npm:1.3.0"],\ + ["gopd", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eastasianwidth", [\ + ["npm:0.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-10c0.zip/node_modules/eastasianwidth/",\ + "packageDependencies": [\ + ["eastasianwidth", "npm:0.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ejs", [\ + ["npm:3.1.10", {\ + "packageLocation": "../../../../.yarn/berry/cache/ejs-npm-3.1.10-4e8cf4bdc1-10c0.zip/node_modules/ejs/",\ + "packageDependencies": [\ + ["ejs", "npm:3.1.10"],\ + ["jake", "npm:10.9.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.1.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/ejs-npm-3.1.8-30583753fc-10c0.zip/node_modules/ejs/",\ + "packageDependencies": [\ + ["ejs", "npm:3.1.8"],\ + ["jake", "npm:10.9.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["electron-fetch", [\ + ["npm:1.9.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/electron-fetch-npm-1.9.1-8630840ecb-10c0.zip/node_modules/electron-fetch/",\ + "packageDependencies": [\ + ["electron-fetch", "npm:1.9.1"],\ + ["encoding", "npm:0.1.13"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["emoji-regex", [\ + ["npm:8.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/emoji-regex-npm-8.0.0-213764015c-10c0.zip/node_modules/emoji-regex/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:8.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:9.2.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/emoji-regex-npm-9.2.2-e6fac8d058-10c0.zip/node_modules/emoji-regex/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:9.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["encoding", [\ + ["npm:0.1.13", {\ + "packageLocation": "../../../../.yarn/berry/cache/encoding-npm-0.1.13-82a1837d30-10c0.zip/node_modules/encoding/",\ + "packageDependencies": [\ + ["encoding", "npm:0.1.13"],\ + ["iconv-lite", "npm:0.6.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["enquirer", [\ + ["npm:2.3.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/enquirer-npm-2.3.6-7899175762-10c0.zip/node_modules/enquirer/",\ + "packageDependencies": [\ + ["ansi-colors", "npm:4.1.3"],\ + ["enquirer", "npm:2.3.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["err-code", [\ + ["npm:3.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/err-code-npm-3.0.1-3a0dc5fc51-10c0.zip/node_modules/err-code/",\ + "packageDependencies": [\ + ["err-code", "npm:3.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["error-ex", [\ + ["npm:1.3.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/error-ex-npm-1.3.2-5654f80c0f-10c0.zip/node_modules/error-ex/",\ + "packageDependencies": [\ + ["error-ex", "npm:1.3.2"],\ + ["is-arrayish", "npm:0.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es-define-property", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/es-define-property-npm-1.0.1-3fc6324f1c-10c0.zip/node_modules/es-define-property/",\ + "packageDependencies": [\ + ["es-define-property", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es-errors", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/es-errors-npm-1.3.0-fda0c9b8a8-10c0.zip/node_modules/es-errors/",\ + "packageDependencies": [\ + ["es-errors", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es-object-atoms", [\ + ["npm:1.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/es-object-atoms-npm-1.1.1-362d8043c2-10c0.zip/node_modules/es-object-atoms/",\ + "packageDependencies": [\ + ["es-errors", "npm:1.3.0"],\ + ["es-object-atoms", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es6-promise", [\ + ["npm:4.2.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/es6-promise-npm-4.2.8-c9f5b11f66-10c0.zip/node_modules/es6-promise/",\ + "packageDependencies": [\ + ["es6-promise", "npm:4.2.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["es6-promisify", [\ + ["npm:5.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/es6-promisify-npm-5.0.0-3726550934-10c0.zip/node_modules/es6-promisify/",\ + "packageDependencies": [\ + ["es6-promise", "npm:4.2.8"],\ + ["es6-promisify", "npm:5.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["escape-string-regexp", [\ + ["npm:1.0.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/escape-string-regexp-npm-1.0.5-3284de402f-10c0.zip/node_modules/escape-string-regexp/",\ + "packageDependencies": [\ + ["escape-string-regexp", "npm:1.0.5"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-10c0.zip/node_modules/escape-string-regexp/",\ + "packageDependencies": [\ + ["escape-string-regexp", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ethereum-cryptography", [\ + ["npm:2.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ethereum-cryptography-npm-2.2.1-b60ce015cb-10c0.zip/node_modules/ethereum-cryptography/",\ + "packageDependencies": [\ + ["@noble/curves", "npm:1.4.2"],\ + ["@noble/hashes", "npm:1.4.0"],\ + ["@scure/bip32", "npm:1.4.0"],\ + ["@scure/bip39", "npm:1.3.0"],\ + ["ethereum-cryptography", "npm:2.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eventemitter3", [\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/eventemitter3-npm-5.0.1-5e423b7df3-10c0.zip/node_modules/eventemitter3/",\ + "packageDependencies": [\ + ["eventemitter3", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["execa", [\ + ["npm:5.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/execa-npm-5.1.1-191347acf5-10c0.zip/node_modules/execa/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.6"],\ + ["execa", "npm:5.1.1"],\ + ["get-stream", "npm:6.0.1"],\ + ["human-signals", "npm:2.1.0"],\ + ["is-stream", "npm:2.0.1"],\ + ["merge-stream", "npm:2.0.0"],\ + ["npm-run-path", "npm:4.0.1"],\ + ["onetime", "npm:5.1.2"],\ + ["signal-exit", "npm:3.0.7"],\ + ["strip-final-newline", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["external-editor", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/external-editor-npm-3.1.0-878e7807af-10c0.zip/node_modules/external-editor/",\ + "packageDependencies": [\ + ["chardet", "npm:0.7.0"],\ + ["external-editor", "npm:3.1.0"],\ + ["iconv-lite", "npm:0.4.24"],\ + ["tmp", "npm:0.0.33"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["eyes", [\ + ["npm:0.1.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/eyes-npm-0.1.8-4f28ed333f-10c0.zip/node_modules/eyes/",\ + "packageDependencies": [\ + ["eyes", "npm:0.1.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-fifo", [\ + ["npm:1.3.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/fast-fifo-npm-1.3.2-391cc25df4-10c0.zip/node_modules/fast-fifo/",\ + "packageDependencies": [\ + ["fast-fifo", "npm:1.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-glob", [\ + ["npm:3.3.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/fast-glob-npm-3.3.3-2a653be532-10c0.zip/node_modules/fast-glob/",\ + "packageDependencies": [\ + ["@nodelib/fs.stat", "npm:2.0.5"],\ + ["@nodelib/fs.walk", "npm:1.2.8"],\ + ["fast-glob", "npm:3.3.3"],\ + ["glob-parent", "npm:5.1.2"],\ + ["merge2", "npm:1.4.1"],\ + ["micromatch", "npm:4.0.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fast-levenshtein", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/fast-levenshtein-npm-3.0.0-8fbb1bef2f-10c0.zip/node_modules/fast-levenshtein/",\ + "packageDependencies": [\ + ["fast-levenshtein", "npm:3.0.0"],\ + ["fastest-levenshtein", "npm:1.0.16"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fastest-levenshtein", [\ + ["npm:1.0.16", {\ + "packageLocation": "../../../../.yarn/berry/cache/fastest-levenshtein-npm-1.0.16-192d328856-10c0.zip/node_modules/fastest-levenshtein/",\ + "packageDependencies": [\ + ["fastest-levenshtein", "npm:1.0.16"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fastq", [\ + ["npm:1.19.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/fastq-npm-1.19.1-ca0a13ec3f-10c0.zip/node_modules/fastq/",\ + "packageDependencies": [\ + ["fastq", "npm:1.19.1"],\ + ["reusify", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["filelist", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/filelist-npm-1.0.4-3a835ae0a7-10c0.zip/node_modules/filelist/",\ + "packageDependencies": [\ + ["filelist", "npm:1.0.4"],\ + ["minimatch", "npm:5.1.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fill-range", [\ + ["npm:7.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/fill-range-npm-7.1.1-bf491486db-10c0.zip/node_modules/fill-range/",\ + "packageDependencies": [\ + ["fill-range", "npm:7.1.1"],\ + ["to-regex-range", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["follow-redirects", [\ + ["npm:1.15.9", {\ + "packageLocation": "../../../../.yarn/berry/cache/follow-redirects-npm-1.15.9-539785d34c-10c0.zip/node_modules/follow-redirects/",\ + "packageDependencies": [\ + ["follow-redirects", "npm:1.15.9"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:e278873748b4e9d158db595d2f6cb0351c74052f52b53924aec4d9299e7b6babfb62aead374cf2f6e453bc8bea3b052380dc6b1137a162bbfc102bbb1c8cac42#npm:1.15.9", {\ + "packageLocation": "./.yarn/__virtual__/follow-redirects-virtual-f701e31d21/5/.yarn/berry/cache/follow-redirects-npm-1.15.9-539785d34c-10c0.zip/node_modules/follow-redirects/",\ + "packageDependencies": [\ + ["@types/debug", null],\ + ["debug", null],\ + ["follow-redirects", "virtual:e278873748b4e9d158db595d2f6cb0351c74052f52b53924aec4d9299e7b6babfb62aead374cf2f6e453bc8bea3b052380dc6b1137a162bbfc102bbb1c8cac42#npm:1.15.9"]\ + ],\ + "packagePeers": [\ + "@types/debug",\ + "debug"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["for-each", [\ + ["npm:0.3.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/for-each-npm-0.3.5-b74c5c5ba7-10c0.zip/node_modules/for-each/",\ + "packageDependencies": [\ + ["for-each", "npm:0.3.5"],\ + ["is-callable", "npm:1.2.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["foreground-child", [\ + ["npm:3.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/foreground-child-npm-3.3.1-b7775fda04-10c0.zip/node_modules/foreground-child/",\ + "packageDependencies": [\ + ["cross-spawn", "npm:7.0.6"],\ + ["foreground-child", "npm:3.3.1"],\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fs-extra", [\ + ["npm:11.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/fs-extra-npm-11.3.0-a6b1b4d5ad-10c0.zip/node_modules/fs-extra/",\ + "packageDependencies": [\ + ["fs-extra", "npm:11.3.0"],\ + ["graceful-fs", "npm:4.2.11"],\ + ["jsonfile", "npm:6.1.0"],\ + ["universalify", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fs-jetpack", [\ + ["npm:4.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/fs-jetpack-npm-4.3.1-db8c1c3372-10c0.zip/node_modules/fs-jetpack/",\ + "packageDependencies": [\ + ["fs-jetpack", "npm:4.3.1"],\ + ["minimatch", "npm:3.1.2"],\ + ["rimraf", "npm:2.7.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["fs.realpath", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/fs.realpath-npm-1.0.0-c8f05d8126-10c0.zip/node_modules/fs.realpath/",\ + "packageDependencies": [\ + ["fs.realpath", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["function-bind", [\ + ["npm:1.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/function-bind-npm-1.1.2-7a55be9b03-10c0.zip/node_modules/function-bind/",\ + "packageDependencies": [\ + ["function-bind", "npm:1.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-intrinsic", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/get-intrinsic-npm-1.3.0-35558f27b6-10c0.zip/node_modules/get-intrinsic/",\ + "packageDependencies": [\ + ["call-bind-apply-helpers", "npm:1.0.2"],\ + ["es-define-property", "npm:1.0.1"],\ + ["es-errors", "npm:1.3.0"],\ + ["es-object-atoms", "npm:1.1.1"],\ + ["function-bind", "npm:1.1.2"],\ + ["get-intrinsic", "npm:1.3.0"],\ + ["get-proto", "npm:1.0.1"],\ + ["gopd", "npm:1.2.0"],\ + ["has-symbols", "npm:1.1.0"],\ + ["hasown", "npm:2.0.2"],\ + ["math-intrinsics", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-iterator", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/get-iterator-npm-1.0.2-5e7d7f186f-10c0.zip/node_modules/get-iterator/",\ + "packageDependencies": [\ + ["get-iterator", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-package-type", [\ + ["npm:0.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/get-package-type-npm-0.1.0-6c70cdc8ab-10c0.zip/node_modules/get-package-type/",\ + "packageDependencies": [\ + ["get-package-type", "npm:0.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-proto", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/get-proto-npm-1.0.1-4d30bac614-10c0.zip/node_modules/get-proto/",\ + "packageDependencies": [\ + ["dunder-proto", "npm:1.0.1"],\ + ["es-object-atoms", "npm:1.1.1"],\ + ["get-proto", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["get-stream", [\ + ["npm:6.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/get-stream-npm-6.0.1-83e51a4642-10c0.zip/node_modules/get-stream/",\ + "packageDependencies": [\ + ["get-stream", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["glob", [\ + ["npm:11.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/glob-npm-11.0.2-cd5db3a299-10c0.zip/node_modules/glob/",\ + "packageDependencies": [\ + ["foreground-child", "npm:3.3.1"],\ + ["glob", "npm:11.0.2"],\ + ["jackspeak", "npm:4.1.0"],\ + ["minimatch", "npm:10.0.1"],\ + ["minipass", "npm:7.1.2"],\ + ["package-json-from-dist", "npm:1.0.1"],\ + ["path-scurry", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.2.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/glob-npm-7.2.3-2d866d17a5-10c0.zip/node_modules/glob/",\ + "packageDependencies": [\ + ["fs.realpath", "npm:1.0.0"],\ + ["glob", "npm:7.2.3"],\ + ["inflight", "npm:1.0.6"],\ + ["inherits", "npm:2.0.4"],\ + ["minimatch", "npm:3.1.2"],\ + ["once", "npm:1.4.0"],\ + ["path-is-absolute", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["glob-parent", [\ + ["npm:5.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/glob-parent-npm-5.1.2-021ab32634-10c0.zip/node_modules/glob-parent/",\ + "packageDependencies": [\ + ["glob-parent", "npm:5.1.2"],\ + ["is-glob", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["globby", [\ + ["npm:11.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/globby-npm-11.1.0-bdcdf20c71-10c0.zip/node_modules/globby/",\ + "packageDependencies": [\ + ["array-union", "npm:2.1.0"],\ + ["dir-glob", "npm:3.0.1"],\ + ["fast-glob", "npm:3.3.3"],\ + ["globby", "npm:11.1.0"],\ + ["ignore", "npm:5.3.2"],\ + ["merge2", "npm:1.4.1"],\ + ["slash", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["gluegun", [\ + ["npm:5.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/gluegun-npm-5.2.0-d68c66c886-10c0.zip/node_modules/gluegun/",\ + "packageDependencies": [\ + ["apisauce", "npm:2.1.6"],\ + ["app-module-path", "npm:2.2.0"],\ + ["cli-table3", "npm:0.6.0"],\ + ["colors", "npm:1.4.0"],\ + ["cosmiconfig", "npm:7.0.1"],\ + ["cross-spawn", "npm:7.0.3"],\ + ["ejs", "npm:3.1.8"],\ + ["enquirer", "npm:2.3.6"],\ + ["execa", "npm:5.1.1"],\ + ["fs-jetpack", "npm:4.3.1"],\ + ["gluegun", "npm:5.2.0"],\ + ["lodash.camelcase", "npm:4.3.0"],\ + ["lodash.kebabcase", "npm:4.1.1"],\ + ["lodash.lowercase", "npm:4.3.0"],\ + ["lodash.lowerfirst", "npm:4.3.1"],\ + ["lodash.pad", "npm:4.5.1"],\ + ["lodash.padend", "npm:4.6.1"],\ + ["lodash.padstart", "npm:4.6.1"],\ + ["lodash.repeat", "npm:4.1.0"],\ + ["lodash.snakecase", "npm:4.1.1"],\ + ["lodash.startcase", "npm:4.4.0"],\ + ["lodash.trim", "npm:4.5.1"],\ + ["lodash.trimend", "npm:4.5.1"],\ + ["lodash.trimstart", "npm:4.5.1"],\ + ["lodash.uppercase", "npm:4.3.0"],\ + ["lodash.upperfirst", "npm:4.3.1"],\ + ["ora", "npm:4.0.2"],\ + ["pluralize", "npm:8.0.0"],\ + ["semver", "npm:7.3.5"],\ + ["which", "npm:2.0.2"],\ + ["yargs-parser", "npm:21.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["gopd", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/gopd-npm-1.2.0-df89ffa78e-10c0.zip/node_modules/gopd/",\ + "packageDependencies": [\ + ["gopd", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["graceful-fs", [\ + ["npm:4.2.10", {\ + "packageLocation": "../../../../.yarn/berry/cache/graceful-fs-npm-4.2.10-79c70989ca-10c0.zip/node_modules/graceful-fs/",\ + "packageDependencies": [\ + ["graceful-fs", "npm:4.2.10"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.2.11", {\ + "packageLocation": "../../../../.yarn/berry/cache/graceful-fs-npm-4.2.11-24bb648a68-10c0.zip/node_modules/graceful-fs/",\ + "packageDependencies": [\ + ["graceful-fs", "npm:4.2.11"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["graphql", [\ + ["npm:16.10.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/graphql-npm-16.10.0-bc1b088de1-10c0.zip/node_modules/graphql/",\ + "packageDependencies": [\ + ["graphql", "npm:16.10.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:16.11.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/graphql-npm-16.11.0-836e6ade28-10c0.zip/node_modules/graphql/",\ + "packageDependencies": [\ + ["graphql", "npm:16.11.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["graphql-import-node", [\ + ["npm:0.0.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/graphql-import-node-npm-0.0.5-b1cf351f68-10c0.zip/node_modules/graphql-import-node/",\ + "packageDependencies": [\ + ["graphql-import-node", "npm:0.0.5"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:eb69d14a1a4d45e3540bbe8fffc370854025924c348c3a845d2e5055bee68f768d75946ff587525345f3aed6360b88fb75d578c754c547b161930a2122c30b1d#npm:0.0.5", {\ + "packageLocation": "./.yarn/__virtual__/graphql-import-node-virtual-194de7742e/5/.yarn/berry/cache/graphql-import-node-npm-0.0.5-b1cf351f68-10c0.zip/node_modules/graphql-import-node/",\ + "packageDependencies": [\ + ["@types/graphql", null],\ + ["graphql", "npm:16.10.0"],\ + ["graphql-import-node", "virtual:eb69d14a1a4d45e3540bbe8fffc370854025924c348c3a845d2e5055bee68f768d75946ff587525345f3aed6360b88fb75d578c754c547b161930a2122c30b1d#npm:0.0.5"]\ + ],\ + "packagePeers": [\ + "@types/graphql",\ + "graphql"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["has-flag", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/has-flag-npm-3.0.0-16ac11fe05-10c0.zip/node_modules/has-flag/",\ + "packageDependencies": [\ + ["has-flag", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/has-flag-npm-4.0.0-32af9f0536-10c0.zip/node_modules/has-flag/",\ + "packageDependencies": [\ + ["has-flag", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["has-property-descriptors", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/has-property-descriptors-npm-1.0.2-d7077d09f1-10c0.zip/node_modules/has-property-descriptors/",\ + "packageDependencies": [\ + ["es-define-property", "npm:1.0.1"],\ + ["has-property-descriptors", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["has-symbols", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/has-symbols-npm-1.1.0-9aa7dc2ac1-10c0.zip/node_modules/has-symbols/",\ + "packageDependencies": [\ + ["has-symbols", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["has-tostringtag", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/has-tostringtag-npm-1.0.2-74a4800369-10c0.zip/node_modules/has-tostringtag/",\ + "packageDependencies": [\ + ["has-symbols", "npm:1.1.0"],\ + ["has-tostringtag", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["hashlru", [\ + ["npm:2.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/hashlru-npm-2.3.0-8267692d49-10c0.zip/node_modules/hashlru/",\ + "packageDependencies": [\ + ["hashlru", "npm:2.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["hasown", [\ + ["npm:2.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/hasown-npm-2.0.2-80fe6c9901-10c0.zip/node_modules/hasown/",\ + "packageDependencies": [\ + ["function-bind", "npm:1.1.2"],\ + ["hasown", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["http-call", [\ + ["npm:5.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/http-call-npm-5.3.0-f2c0703f3b-10c0.zip/node_modules/http-call/",\ + "packageDependencies": [\ + ["content-type", "npm:1.0.5"],\ + ["debug", "virtual:33b35de7a2633f80dae8f80fdea6ac2d060de71e6f3f69ccbcd31b13d0843b941a76219401f479874cd9df85f5b2a2d5a53156bf01580f389de0d863dbff92ea#npm:4.4.0"],\ + ["http-call", "npm:5.3.0"],\ + ["is-retry-allowed", "npm:1.2.0"],\ + ["is-stream", "npm:2.0.1"],\ + ["parse-json", "npm:4.0.0"],\ + ["tunnel-agent", "npm:0.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["human-signals", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/human-signals-npm-2.1.0-f75815481d-10c0.zip/node_modules/human-signals/",\ + "packageDependencies": [\ + ["human-signals", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["iconv-lite", [\ + ["npm:0.4.24", {\ + "packageLocation": "../../../../.yarn/berry/cache/iconv-lite-npm-0.4.24-c5c4ac6695-10c0.zip/node_modules/iconv-lite/",\ + "packageDependencies": [\ + ["iconv-lite", "npm:0.4.24"],\ + ["safer-buffer", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.6.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/iconv-lite-npm-0.6.3-24b8aae27e-10c0.zip/node_modules/iconv-lite/",\ + "packageDependencies": [\ + ["iconv-lite", "npm:0.6.3"],\ + ["safer-buffer", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ieee754", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ieee754-npm-1.2.1-fb63b3caeb-10c0.zip/node_modules/ieee754/",\ + "packageDependencies": [\ + ["ieee754", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ignore", [\ + ["npm:5.3.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/ignore-npm-5.3.2-346d3ba017-10c0.zip/node_modules/ignore/",\ + "packageDependencies": [\ + ["ignore", "npm:5.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["immutable", [\ + ["npm:5.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/immutable-npm-5.1.2-ce2e5e7696-10c0.zip/node_modules/immutable/",\ + "packageDependencies": [\ + ["immutable", "npm:5.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["import-fresh", [\ + ["npm:3.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/import-fresh-npm-3.3.1-1916794950-10c0.zip/node_modules/import-fresh/",\ + "packageDependencies": [\ + ["import-fresh", "npm:3.3.1"],\ + ["parent-module", "npm:1.0.1"],\ + ["resolve-from", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["indent-string", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/indent-string-npm-4.0.0-7b717435b2-10c0.zip/node_modules/indent-string/",\ + "packageDependencies": [\ + ["indent-string", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["inflight", [\ + ["npm:1.0.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/inflight-npm-1.0.6-ccedb4b908-10c0.zip/node_modules/inflight/",\ + "packageDependencies": [\ + ["inflight", "npm:1.0.6"],\ + ["once", "npm:1.4.0"],\ + ["wrappy", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["inherits", [\ + ["npm:2.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/inherits-npm-2.0.4-c66b3957a0-10c0.zip/node_modules/inherits/",\ + "packageDependencies": [\ + ["inherits", "npm:2.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ini", [\ + ["npm:1.3.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/ini-npm-1.3.8-fb5040b4c0-10c0.zip/node_modules/ini/",\ + "packageDependencies": [\ + ["ini", "npm:1.3.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["interface-datastore", [\ + ["npm:8.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/interface-datastore-npm-8.3.1-5e0248d6cf-10c0.zip/node_modules/interface-datastore/",\ + "packageDependencies": [\ + ["interface-datastore", "npm:8.3.1"],\ + ["interface-store", "npm:6.0.2"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["interface-store", [\ + ["npm:6.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/interface-store-npm-6.0.2-8a8ab71c10-10c0.zip/node_modules/interface-store/",\ + "packageDependencies": [\ + ["interface-store", "npm:6.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ipfs-unixfs", [\ + ["npm:11.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ipfs-unixfs-npm-11.2.1-1c373484b0-10c0.zip/node_modules/ipfs-unixfs/",\ + "packageDependencies": [\ + ["ipfs-unixfs", "npm:11.2.1"],\ + ["protons-runtime", "npm:5.5.0"],\ + ["uint8arraylist", "npm:2.4.8"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-arguments", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-arguments-npm-1.2.0-ecfcc85b28-10c0.zip/node_modules/is-arguments/",\ + "packageDependencies": [\ + ["call-bound", "npm:1.0.4"],\ + ["has-tostringtag", "npm:1.0.2"],\ + ["is-arguments", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-arrayish", [\ + ["npm:0.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-arrayish-npm-0.2.1-23927dfb15-10c0.zip/node_modules/is-arrayish/",\ + "packageDependencies": [\ + ["is-arrayish", "npm:0.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-callable", [\ + ["npm:1.2.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-callable-npm-1.2.7-808a303e61-10c0.zip/node_modules/is-callable/",\ + "packageDependencies": [\ + ["is-callable", "npm:1.2.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-docker", [\ + ["npm:2.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-docker-npm-2.2.1-3f18a53aff-10c0.zip/node_modules/is-docker/",\ + "packageDependencies": [\ + ["is-docker", "npm:2.2.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-docker-npm-3.0.0-1570e32177-10c0.zip/node_modules/is-docker/",\ + "packageDependencies": [\ + ["is-docker", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-electron", [\ + ["npm:2.2.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-electron-npm-2.2.2-f91452a3d8-10c0.zip/node_modules/is-electron/",\ + "packageDependencies": [\ + ["is-electron", "npm:2.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-extglob", [\ + ["npm:2.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-extglob-npm-2.1.1-0870ea68b5-10c0.zip/node_modules/is-extglob/",\ + "packageDependencies": [\ + ["is-extglob", "npm:2.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-fullwidth-code-point", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-10c0.zip/node_modules/is-fullwidth-code-point/",\ + "packageDependencies": [\ + ["is-fullwidth-code-point", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-generator-function", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-generator-function-npm-1.1.0-e96e2ba973-10c0.zip/node_modules/is-generator-function/",\ + "packageDependencies": [\ + ["call-bound", "npm:1.0.4"],\ + ["get-proto", "npm:1.0.1"],\ + ["has-tostringtag", "npm:1.0.2"],\ + ["is-generator-function", "npm:1.1.0"],\ + ["safe-regex-test", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-glob", [\ + ["npm:4.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-glob-npm-4.0.3-cb87bf1bdb-10c0.zip/node_modules/is-glob/",\ + "packageDependencies": [\ + ["is-extglob", "npm:2.1.1"],\ + ["is-glob", "npm:4.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-inside-container", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-inside-container-npm-1.0.0-f2c9e9bb96-10c0.zip/node_modules/is-inside-container/",\ + "packageDependencies": [\ + ["is-docker", "npm:3.0.0"],\ + ["is-inside-container", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-interactive", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-interactive-npm-1.0.0-7ff7c6e04a-10c0.zip/node_modules/is-interactive/",\ + "packageDependencies": [\ + ["is-interactive", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-number", [\ + ["npm:7.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-number-npm-7.0.0-060086935c-10c0.zip/node_modules/is-number/",\ + "packageDependencies": [\ + ["is-number", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-plain-obj", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-plain-obj-npm-2.1.0-8dffd7ae9c-10c0.zip/node_modules/is-plain-obj/",\ + "packageDependencies": [\ + ["is-plain-obj", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-regex", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-regex-npm-1.2.1-70a484f2c8-10c0.zip/node_modules/is-regex/",\ + "packageDependencies": [\ + ["call-bound", "npm:1.0.4"],\ + ["gopd", "npm:1.2.0"],\ + ["has-tostringtag", "npm:1.0.2"],\ + ["hasown", "npm:2.0.2"],\ + ["is-regex", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-retry-allowed", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-retry-allowed-npm-1.2.0-730be11f6c-10c0.zip/node_modules/is-retry-allowed/",\ + "packageDependencies": [\ + ["is-retry-allowed", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-stream", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-stream-npm-2.0.1-c802db55e7-10c0.zip/node_modules/is-stream/",\ + "packageDependencies": [\ + ["is-stream", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-typed-array", [\ + ["npm:1.1.15", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-typed-array-npm-1.1.15-33aa18e28f-10c0.zip/node_modules/is-typed-array/",\ + "packageDependencies": [\ + ["is-typed-array", "npm:1.1.15"],\ + ["which-typed-array", "npm:1.1.19"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["is-wsl", [\ + ["npm:2.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-wsl-npm-2.2.0-2ba10d6393-10c0.zip/node_modules/is-wsl/",\ + "packageDependencies": [\ + ["is-docker", "npm:2.2.1"],\ + ["is-wsl", "npm:2.2.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/is-wsl-npm-3.1.0-311c6d2265-10c0.zip/node_modules/is-wsl/",\ + "packageDependencies": [\ + ["is-inside-container", "npm:1.0.0"],\ + ["is-wsl", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["isexe", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/isexe-npm-2.0.0-b58870bd2e-10c0.zip/node_modules/isexe/",\ + "packageDependencies": [\ + ["isexe", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["iso-url", [\ + ["npm:1.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/iso-url-npm-1.2.1-494c3c59bc-10c0.zip/node_modules/iso-url/",\ + "packageDependencies": [\ + ["iso-url", "npm:1.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["isomorphic-ws", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/isomorphic-ws-npm-4.0.1-aa39192848-10c0.zip/node_modules/isomorphic-ws/",\ + "packageDependencies": [\ + ["isomorphic-ws", "npm:4.0.1"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:618233a2dcdf47988a49cce1a4afa1907b85348b81655ae3cef6a0bc15177dee76d9cd59fec5478d0d08c26c65adf770148c58f3fc1deba135dfe9b9634c5fc1#npm:4.0.1", {\ + "packageLocation": "./.yarn/__virtual__/isomorphic-ws-virtual-4acd4e872b/5/.yarn/berry/cache/isomorphic-ws-npm-4.0.1-aa39192848-10c0.zip/node_modules/isomorphic-ws/",\ + "packageDependencies": [\ + ["@types/ws", "npm:7.4.7"],\ + ["isomorphic-ws", "virtual:618233a2dcdf47988a49cce1a4afa1907b85348b81655ae3cef6a0bc15177dee76d9cd59fec5478d0d08c26c65adf770148c58f3fc1deba135dfe9b9634c5fc1#npm:4.0.1"],\ + ["ws", "virtual:618233a2dcdf47988a49cce1a4afa1907b85348b81655ae3cef6a0bc15177dee76d9cd59fec5478d0d08c26c65adf770148c58f3fc1deba135dfe9b9634c5fc1#npm:7.5.10"]\ + ],\ + "packagePeers": [\ + "@types/ws",\ + "ws"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-all", [\ + ["npm:3.0.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-all-npm-3.0.7-0177cf04f7-10c0.zip/node_modules/it-all/",\ + "packageDependencies": [\ + ["it-all", "npm:3.0.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-first", [\ + ["npm:3.0.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-first-npm-3.0.7-ca617bf707-10c0.zip/node_modules/it-first/",\ + "packageDependencies": [\ + ["it-first", "npm:3.0.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-glob", [\ + ["npm:3.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-glob-npm-3.0.2-e3eb08726b-10c0.zip/node_modules/it-glob/",\ + "packageDependencies": [\ + ["fast-glob", "npm:3.3.3"],\ + ["it-glob", "npm:3.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-last", [\ + ["npm:3.0.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-last-npm-3.0.7-e2bc476306-10c0.zip/node_modules/it-last/",\ + "packageDependencies": [\ + ["it-last", "npm:3.0.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-map", [\ + ["npm:3.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-map-npm-3.1.2-0d4ac894bc-10c0.zip/node_modules/it-map/",\ + "packageDependencies": [\ + ["it-map", "npm:3.1.2"],\ + ["it-peekable", "npm:3.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-peekable", [\ + ["npm:3.0.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-peekable-npm-3.0.6-76c855fc9a-10c0.zip/node_modules/it-peekable/",\ + "packageDependencies": [\ + ["it-peekable", "npm:3.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-pushable", [\ + ["npm:3.2.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-pushable-npm-3.2.3-843881a35f-10c0.zip/node_modules/it-pushable/",\ + "packageDependencies": [\ + ["it-pushable", "npm:3.2.3"],\ + ["p-defer", "npm:4.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-stream-types", [\ + ["npm:2.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-stream-types-npm-2.0.2-bc07d398b6-10c0.zip/node_modules/it-stream-types/",\ + "packageDependencies": [\ + ["it-stream-types", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["it-to-stream", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/it-to-stream-npm-1.0.0-294db689c3-10c0.zip/node_modules/it-to-stream/",\ + "packageDependencies": [\ + ["buffer", "npm:6.0.3"],\ + ["fast-fifo", "npm:1.3.2"],\ + ["get-iterator", "npm:1.0.2"],\ + ["it-to-stream", "npm:1.0.0"],\ + ["p-defer", "npm:3.0.0"],\ + ["p-fifo", "npm:1.0.0"],\ + ["readable-stream", "npm:3.6.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jackspeak", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/jackspeak-npm-4.1.0-8f220eaf6d-10c0.zip/node_modules/jackspeak/",\ + "packageDependencies": [\ + ["@isaacs/cliui", "npm:8.0.2"],\ + ["jackspeak", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jake", [\ + ["npm:10.9.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/jake-npm-10.9.2-3bf2173aed-10c0.zip/node_modules/jake/",\ + "packageDependencies": [\ + ["async", "npm:3.2.6"],\ + ["chalk", "npm:4.1.2"],\ + ["filelist", "npm:1.0.4"],\ + ["jake", "npm:10.9.2"],\ + ["minimatch", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jayson", [\ + ["npm:4.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/jayson-npm-4.2.0-618233a2dc-10c0.zip/node_modules/jayson/",\ + "packageDependencies": [\ + ["@types/connect", "npm:3.4.38"],\ + ["@types/node", "npm:12.20.55"],\ + ["@types/ws", "npm:7.4.7"],\ + ["commander", "npm:2.20.3"],\ + ["delay", "npm:5.0.0"],\ + ["es6-promisify", "npm:5.0.0"],\ + ["eyes", "npm:0.1.8"],\ + ["isomorphic-ws", "virtual:618233a2dcdf47988a49cce1a4afa1907b85348b81655ae3cef6a0bc15177dee76d9cd59fec5478d0d08c26c65adf770148c58f3fc1deba135dfe9b9634c5fc1#npm:4.0.1"],\ + ["jayson", "npm:4.2.0"],\ + ["json-stringify-safe", "npm:5.0.1"],\ + ["stream-json", "npm:1.9.1"],\ + ["uuid", "npm:8.3.2"],\ + ["ws", "virtual:618233a2dcdf47988a49cce1a4afa1907b85348b81655ae3cef6a0bc15177dee76d9cd59fec5478d0d08c26c65adf770148c58f3fc1deba135dfe9b9634c5fc1#npm:7.5.10"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-tokens", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/js-tokens-npm-4.0.0-0ac852e9e2-10c0.zip/node_modules/js-tokens/",\ + "packageDependencies": [\ + ["js-tokens", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["js-yaml", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/js-yaml-npm-4.1.0-3606f32312-10c0.zip/node_modules/js-yaml/",\ + "packageDependencies": [\ + ["argparse", "npm:2.0.1"],\ + ["js-yaml", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-parse-better-errors", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/json-parse-better-errors-npm-1.0.2-7f37637d19-10c0.zip/node_modules/json-parse-better-errors/",\ + "packageDependencies": [\ + ["json-parse-better-errors", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-parse-even-better-errors", [\ + ["npm:2.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-10c0.zip/node_modules/json-parse-even-better-errors/",\ + "packageDependencies": [\ + ["json-parse-even-better-errors", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["json-stringify-safe", [\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/json-stringify-safe-npm-5.0.1-064ddd6ab4-10c0.zip/node_modules/json-stringify-safe/",\ + "packageDependencies": [\ + ["json-stringify-safe", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["jsonfile", [\ + ["npm:6.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/jsonfile-npm-6.1.0-20a4796cee-10c0.zip/node_modules/jsonfile/",\ + "packageDependencies": [\ + ["graceful-fs", "npm:4.2.11"],\ + ["jsonfile", "npm:6.1.0"],\ + ["universalify", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["kubo-rpc-client", [\ + ["npm:5.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/kubo-rpc-client-npm-5.1.0-5cfac592dc-10c0.zip/node_modules/kubo-rpc-client/",\ + "packageDependencies": [\ + ["@ipld/dag-cbor", "npm:9.2.2"],\ + ["@ipld/dag-json", "npm:10.2.3"],\ + ["@ipld/dag-pb", "npm:4.1.3"],\ + ["@libp2p/crypto", "npm:5.1.0"],\ + ["@libp2p/interface", "npm:2.8.0"],\ + ["@libp2p/logger", "npm:5.1.14"],\ + ["@libp2p/peer-id", "npm:5.1.1"],\ + ["@multiformats/multiaddr", "npm:12.4.0"],\ + ["@multiformats/multiaddr-to-uri", "npm:11.0.0"],\ + ["any-signal", "npm:4.1.1"],\ + ["blob-to-it", "npm:2.0.8"],\ + ["browser-readablestream-to-it", "npm:2.0.8"],\ + ["dag-jose", "npm:5.1.1"],\ + ["electron-fetch", "npm:1.9.1"],\ + ["err-code", "npm:3.0.1"],\ + ["ipfs-unixfs", "npm:11.2.1"],\ + ["iso-url", "npm:1.2.1"],\ + ["it-all", "npm:3.0.7"],\ + ["it-first", "npm:3.0.7"],\ + ["it-glob", "npm:3.0.2"],\ + ["it-last", "npm:3.0.7"],\ + ["it-map", "npm:3.1.2"],\ + ["it-peekable", "npm:3.0.6"],\ + ["it-to-stream", "npm:1.0.0"],\ + ["kubo-rpc-client", "npm:5.1.0"],\ + ["merge-options", "npm:3.0.4"],\ + ["multiformats", "npm:13.3.2"],\ + ["nanoid", "npm:5.1.5"],\ + ["native-fetch", "virtual:5cfac592dcc26b5b7bd95340ec530d23417205f361216c3b383a4557cafcf010c6c1dba6e87900155da096f1991a14b5da7b984904c7b6ab3eaaaf9060256c33#npm:4.0.2"],\ + ["parse-duration", "npm:2.1.4"],\ + ["react-native-fetch-api", "npm:3.0.0"],\ + ["stream-to-it", "npm:1.0.1"],\ + ["uint8arrays", "npm:5.1.0"],\ + ["wherearewe", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lilconfig", [\ + ["npm:3.1.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/lilconfig-npm-3.1.3-74a77377bb-10c0.zip/node_modules/lilconfig/",\ + "packageDependencies": [\ + ["lilconfig", "npm:3.1.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lines-and-columns", [\ + ["npm:1.2.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/lines-and-columns-npm-1.2.4-d6c7cc5799-10c0.zip/node_modules/lines-and-columns/",\ + "packageDependencies": [\ + ["lines-and-columns", "npm:1.2.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash", [\ + ["npm:4.17.21", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash-npm-4.17.21-6382451519-10c0.zip/node_modules/lodash/",\ + "packageDependencies": [\ + ["lodash", "npm:4.17.21"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.camelcase", [\ + ["npm:4.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.camelcase-npm-4.3.0-bf268e3bf0-10c0.zip/node_modules/lodash.camelcase/",\ + "packageDependencies": [\ + ["lodash.camelcase", "npm:4.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.kebabcase", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.kebabcase-npm-4.1.1-89ffca7e1f-10c0.zip/node_modules/lodash.kebabcase/",\ + "packageDependencies": [\ + ["lodash.kebabcase", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.lowercase", [\ + ["npm:4.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.lowercase-npm-4.3.0-a8a054cc32-10c0.zip/node_modules/lodash.lowercase/",\ + "packageDependencies": [\ + ["lodash.lowercase", "npm:4.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.lowerfirst", [\ + ["npm:4.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.lowerfirst-npm-4.3.1-2face3f9db-10c0.zip/node_modules/lodash.lowerfirst/",\ + "packageDependencies": [\ + ["lodash.lowerfirst", "npm:4.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.pad", [\ + ["npm:4.5.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.pad-npm-4.5.1-814297ce35-10c0.zip/node_modules/lodash.pad/",\ + "packageDependencies": [\ + ["lodash.pad", "npm:4.5.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.padend", [\ + ["npm:4.6.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.padend-npm-4.6.1-6a28392d72-10c0.zip/node_modules/lodash.padend/",\ + "packageDependencies": [\ + ["lodash.padend", "npm:4.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.padstart", [\ + ["npm:4.6.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.padstart-npm-4.6.1-c905d3b705-10c0.zip/node_modules/lodash.padstart/",\ + "packageDependencies": [\ + ["lodash.padstart", "npm:4.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.repeat", [\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.repeat-npm-4.1.0-9afe9ac75d-10c0.zip/node_modules/lodash.repeat/",\ + "packageDependencies": [\ + ["lodash.repeat", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.snakecase", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.snakecase-npm-4.1.1-b12cdbecb4-10c0.zip/node_modules/lodash.snakecase/",\ + "packageDependencies": [\ + ["lodash.snakecase", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.startcase", [\ + ["npm:4.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.startcase-npm-4.4.0-637aa8cc15-10c0.zip/node_modules/lodash.startcase/",\ + "packageDependencies": [\ + ["lodash.startcase", "npm:4.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.trim", [\ + ["npm:4.5.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.trim-npm-4.5.1-b920ce5a9f-10c0.zip/node_modules/lodash.trim/",\ + "packageDependencies": [\ + ["lodash.trim", "npm:4.5.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.trimend", [\ + ["npm:4.5.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.trimend-npm-4.5.1-072e5bd2c8-10c0.zip/node_modules/lodash.trimend/",\ + "packageDependencies": [\ + ["lodash.trimend", "npm:4.5.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.trimstart", [\ + ["npm:4.5.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.trimstart-npm-4.5.1-ad539ab14e-10c0.zip/node_modules/lodash.trimstart/",\ + "packageDependencies": [\ + ["lodash.trimstart", "npm:4.5.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.uppercase", [\ + ["npm:4.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.uppercase-npm-4.3.0-e7eb5a36a6-10c0.zip/node_modules/lodash.uppercase/",\ + "packageDependencies": [\ + ["lodash.uppercase", "npm:4.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lodash.upperfirst", [\ + ["npm:4.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/lodash.upperfirst-npm-4.3.1-e3b7c364ba-10c0.zip/node_modules/lodash.upperfirst/",\ + "packageDependencies": [\ + ["lodash.upperfirst", "npm:4.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["log-symbols", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/log-symbols-npm-3.0.0-b9d1446657-10c0.zip/node_modules/log-symbols/",\ + "packageDependencies": [\ + ["chalk", "npm:2.4.2"],\ + ["log-symbols", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["long", [\ + ["npm:5.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/long-npm-5.3.1-c44e0933f0-10c0.zip/node_modules/long/",\ + "packageDependencies": [\ + ["long", "npm:5.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["lru-cache", [\ + ["npm:11.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/lru-cache-npm-11.1.0-3de771fc22-10c0.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:11.1.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/lru-cache-npm-6.0.0-b4c8668fe1-10c0.zip/node_modules/lru-cache/",\ + "packageDependencies": [\ + ["lru-cache", "npm:6.0.0"],\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["matchstick-as", [\ + ["npm:0.6.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/matchstick-as-npm-0.6.0-d452d55488-10c0.zip/node_modules/matchstick-as/",\ + "packageDependencies": [\ + ["matchstick-as", "npm:0.6.0"],\ + ["wabt", "npm:1.0.24"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["math-intrinsics", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/math-intrinsics-npm-1.1.0-9204d80e7d-10c0.zip/node_modules/math-intrinsics/",\ + "packageDependencies": [\ + ["math-intrinsics", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["merge-options", [\ + ["npm:3.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/merge-options-npm-3.0.4-f2ee6b8ea0-10c0.zip/node_modules/merge-options/",\ + "packageDependencies": [\ + ["is-plain-obj", "npm:2.1.0"],\ + ["merge-options", "npm:3.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["merge-stream", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/merge-stream-npm-2.0.0-2ac83efea5-10c0.zip/node_modules/merge-stream/",\ + "packageDependencies": [\ + ["merge-stream", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["merge2", [\ + ["npm:1.4.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/merge2-npm-1.4.1-a2507bd06c-10c0.zip/node_modules/merge2/",\ + "packageDependencies": [\ + ["merge2", "npm:1.4.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["micromatch", [\ + ["npm:4.0.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/micromatch-npm-4.0.8-c9570e4aca-10c0.zip/node_modules/micromatch/",\ + "packageDependencies": [\ + ["braces", "npm:3.0.3"],\ + ["micromatch", "npm:4.0.8"],\ + ["picomatch", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mimic-fn", [\ + ["npm:2.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-10c0.zip/node_modules/mimic-fn/",\ + "packageDependencies": [\ + ["mimic-fn", "npm:2.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minimatch", [\ + ["npm:10.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/minimatch-npm-10.0.1-eabcc0d3a0-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:2.0.1"],\ + ["minimatch", "npm:10.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/minimatch-npm-3.1.2-9405269906-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:1.1.11"],\ + ["minimatch", "npm:3.1.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.1.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/minimatch-npm-5.1.6-1e71429f4c-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:2.0.1"],\ + ["minimatch", "npm:5.1.6"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:9.0.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/minimatch-npm-9.0.5-9aa93d97fa-10c0.zip/node_modules/minimatch/",\ + "packageDependencies": [\ + ["brace-expansion", "npm:2.0.1"],\ + ["minimatch", "npm:9.0.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["minipass", [\ + ["npm:7.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/minipass-npm-7.1.2-3a5327d36d-10c0.zip/node_modules/minipass/",\ + "packageDependencies": [\ + ["minipass", "npm:7.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ms", [\ + ["npm:2.1.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/ms-npm-2.1.3-81ff3cfac1-10c0.zip/node_modules/ms/",\ + "packageDependencies": [\ + ["ms", "npm:2.1.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:3.0.0-canary.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/ms-npm-3.0.0-canary.1-a95efad0b2-10c0.zip/node_modules/ms/",\ + "packageDependencies": [\ + ["ms", "npm:3.0.0-canary.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["multiformats", [\ + ["npm:13.1.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/multiformats-npm-13.1.3-0f6527cd60-10c0.zip/node_modules/multiformats/",\ + "packageDependencies": [\ + ["multiformats", "npm:13.1.3"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:13.3.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/multiformats-npm-13.3.2-5787b020ca-10c0.zip/node_modules/multiformats/",\ + "packageDependencies": [\ + ["multiformats", "npm:13.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["mute-stream", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/mute-stream-npm-2.0.0-45d3c1ef83-10c0.zip/node_modules/mute-stream/",\ + "packageDependencies": [\ + ["mute-stream", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["nanoid", [\ + ["npm:5.1.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/nanoid-npm-5.1.5-79b61a9d37-10c0.zip/node_modules/nanoid/",\ + "packageDependencies": [\ + ["nanoid", "npm:5.1.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["native-fetch", [\ + ["npm:4.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/native-fetch-npm-4.0.2-ffee0cac69-10c0.zip/node_modules/native-fetch/",\ + "packageDependencies": [\ + ["native-fetch", "npm:4.0.2"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:5cfac592dcc26b5b7bd95340ec530d23417205f361216c3b383a4557cafcf010c6c1dba6e87900155da096f1991a14b5da7b984904c7b6ab3eaaaf9060256c33#npm:4.0.2", {\ + "packageLocation": "./.yarn/__virtual__/native-fetch-virtual-af21fcc88a/5/.yarn/berry/cache/native-fetch-npm-4.0.2-ffee0cac69-10c0.zip/node_modules/native-fetch/",\ + "packageDependencies": [\ + ["@types/undici", null],\ + ["native-fetch", "virtual:5cfac592dcc26b5b7bd95340ec530d23417205f361216c3b383a4557cafcf010c6c1dba6e87900155da096f1991a14b5da7b984904c7b6ab3eaaaf9060256c33#npm:4.0.2"],\ + ["undici", null]\ + ],\ + "packagePeers": [\ + "@types/undici",\ + "undici"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["npm-run-path", [\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/npm-run-path-npm-4.0.1-7aebd8bab3-10c0.zip/node_modules/npm-run-path/",\ + "packageDependencies": [\ + ["npm-run-path", "npm:4.0.1"],\ + ["path-key", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["object-assign", [\ + ["npm:4.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/object-assign-npm-4.1.1-1004ad6dec-10c0.zip/node_modules/object-assign/",\ + "packageDependencies": [\ + ["object-assign", "npm:4.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["once", [\ + ["npm:1.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/once-npm-1.4.0-ccf03ef07a-10c0.zip/node_modules/once/",\ + "packageDependencies": [\ + ["once", "npm:1.4.0"],\ + ["wrappy", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["onetime", [\ + ["npm:5.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/onetime-npm-5.1.2-3ed148fa42-10c0.zip/node_modules/onetime/",\ + "packageDependencies": [\ + ["mimic-fn", "npm:2.1.0"],\ + ["onetime", "npm:5.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["open", [\ + ["npm:10.1.2", {\ + "packageLocation": "./.yarn/unplugged/open-npm-10.1.2-5b2dc8fe72/node_modules/open/",\ + "packageDependencies": [\ + ["default-browser", "npm:5.2.1"],\ + ["define-lazy-prop", "npm:3.0.0"],\ + ["is-inside-container", "npm:1.0.0"],\ + ["is-wsl", "npm:3.1.0"],\ + ["open", "npm:10.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ora", [\ + ["npm:4.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/ora-npm-4.0.2-8af92543c0-10c0.zip/node_modules/ora/",\ + "packageDependencies": [\ + ["chalk", "npm:2.4.2"],\ + ["cli-cursor", "npm:3.1.0"],\ + ["cli-spinners", "npm:2.9.2"],\ + ["is-interactive", "npm:1.0.0"],\ + ["log-symbols", "npm:3.0.0"],\ + ["ora", "npm:4.0.2"],\ + ["strip-ansi", "npm:5.2.0"],\ + ["wcwidth", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["os-tmpdir", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/os-tmpdir-npm-1.0.2-e305b0689b-10c0.zip/node_modules/os-tmpdir/",\ + "packageDependencies": [\ + ["os-tmpdir", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-defer", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/p-defer-npm-3.0.0-5c4fecb489-10c0.zip/node_modules/p-defer/",\ + "packageDependencies": [\ + ["p-defer", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/p-defer-npm-4.0.1-4c0c7acec8-10c0.zip/node_modules/p-defer/",\ + "packageDependencies": [\ + ["p-defer", "npm:4.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-fifo", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/p-fifo-npm-1.0.0-70306fa5f2-10c0.zip/node_modules/p-fifo/",\ + "packageDependencies": [\ + ["fast-fifo", "npm:1.3.2"],\ + ["p-defer", "npm:3.0.0"],\ + ["p-fifo", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-queue", [\ + ["npm:8.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/p-queue-npm-8.1.0-a79a145767-10c0.zip/node_modules/p-queue/",\ + "packageDependencies": [\ + ["eventemitter3", "npm:5.0.1"],\ + ["p-queue", "npm:8.1.0"],\ + ["p-timeout", "npm:6.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["p-timeout", [\ + ["npm:6.1.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/p-timeout-npm-6.1.4-84ec228b4c-10c0.zip/node_modules/p-timeout/",\ + "packageDependencies": [\ + ["p-timeout", "npm:6.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["package-json-from-dist", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/package-json-from-dist-npm-1.0.1-4631a88465-10c0.zip/node_modules/package-json-from-dist/",\ + "packageDependencies": [\ + ["package-json-from-dist", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["parent-module", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/parent-module-npm-1.0.1-1fae11b095-10c0.zip/node_modules/parent-module/",\ + "packageDependencies": [\ + ["callsites", "npm:3.1.0"],\ + ["parent-module", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["parse-duration", [\ + ["npm:2.1.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/parse-duration-npm-2.1.4-3967f31419-10c0.zip/node_modules/parse-duration/",\ + "packageDependencies": [\ + ["parse-duration", "npm:2.1.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["parse-json", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/parse-json-npm-4.0.0-a6f7771010-10c0.zip/node_modules/parse-json/",\ + "packageDependencies": [\ + ["error-ex", "npm:1.3.2"],\ + ["json-parse-better-errors", "npm:1.0.2"],\ + ["parse-json", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/parse-json-npm-5.2.0-00a63b1199-10c0.zip/node_modules/parse-json/",\ + "packageDependencies": [\ + ["@babel/code-frame", "npm:7.26.2"],\ + ["error-ex", "npm:1.3.2"],\ + ["json-parse-even-better-errors", "npm:2.3.1"],\ + ["lines-and-columns", "npm:1.2.4"],\ + ["parse-json", "npm:5.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-is-absolute", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/path-is-absolute-npm-1.0.1-31bc695ffd-10c0.zip/node_modules/path-is-absolute/",\ + "packageDependencies": [\ + ["path-is-absolute", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-key", [\ + ["npm:3.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/path-key-npm-3.1.1-0e66ea8321-10c0.zip/node_modules/path-key/",\ + "packageDependencies": [\ + ["path-key", "npm:3.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-scurry", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/path-scurry-npm-2.0.0-5a556e8161-10c0.zip/node_modules/path-scurry/",\ + "packageDependencies": [\ + ["lru-cache", "npm:11.1.0"],\ + ["minipass", "npm:7.1.2"],\ + ["path-scurry", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["path-type", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/path-type-npm-4.0.0-10d47fc86a-10c0.zip/node_modules/path-type/",\ + "packageDependencies": [\ + ["path-type", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["pd", [\ + ["workspace:.", {\ + "packageLocation": "./",\ + "packageDependencies": [\ + ["@graphprotocol/graph-cli", "npm:0.97.1"],\ + ["@graphprotocol/graph-ts", "npm:0.38.1"],\ + ["matchstick-as", "npm:0.6.0"],\ + ["pd", "workspace:."]\ + ],\ + "linkType": "SOFT"\ + }]\ + ]],\ + ["picocolors", [\ + ["npm:1.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/picocolors-npm-1.1.1-4fede47cf1-10c0.zip/node_modules/picocolors/",\ + "packageDependencies": [\ + ["picocolors", "npm:1.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["picomatch", [\ + ["npm:2.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/picomatch-npm-2.3.1-c782cfd986-10c0.zip/node_modules/picomatch/",\ + "packageDependencies": [\ + ["picomatch", "npm:2.3.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["pluralize", [\ + ["npm:8.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/pluralize-npm-8.0.0-f5f044ed52-10c0.zip/node_modules/pluralize/",\ + "packageDependencies": [\ + ["pluralize", "npm:8.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["possible-typed-array-names", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/possible-typed-array-names-npm-1.1.0-ce60ca4401-10c0.zip/node_modules/possible-typed-array-names/",\ + "packageDependencies": [\ + ["possible-typed-array-names", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["prettier", [\ + ["npm:3.5.3", {\ + "packageLocation": "./.yarn/unplugged/prettier-npm-3.5.3-787132ce04/node_modules/prettier/",\ + "packageDependencies": [\ + ["prettier", "npm:3.5.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["progress-events", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/progress-events-npm-1.0.1-6f03d2ce75-10c0.zip/node_modules/progress-events/",\ + "packageDependencies": [\ + ["progress-events", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["proto-list", [\ + ["npm:1.2.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/proto-list-npm-1.2.4-a96a43df28-10c0.zip/node_modules/proto-list/",\ + "packageDependencies": [\ + ["proto-list", "npm:1.2.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["protons-runtime", [\ + ["npm:5.5.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/protons-runtime-npm-5.5.0-6037e8e736-10c0.zip/node_modules/protons-runtime/",\ + "packageDependencies": [\ + ["protons-runtime", "npm:5.5.0"],\ + ["uint8-varint", "npm:2.0.4"],\ + ["uint8arraylist", "npm:2.4.8"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["queue-microtask", [\ + ["npm:1.2.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/queue-microtask-npm-1.2.3-fcc98e4e2d-10c0.zip/node_modules/queue-microtask/",\ + "packageDependencies": [\ + ["queue-microtask", "npm:1.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["react-native-fetch-api", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/react-native-fetch-api-npm-3.0.0-12466fff41-10c0.zip/node_modules/react-native-fetch-api/",\ + "packageDependencies": [\ + ["p-defer", "npm:3.0.0"],\ + ["react-native-fetch-api", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["readable-stream", [\ + ["npm:3.6.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/readable-stream-npm-3.6.2-d2a6069158-10c0.zip/node_modules/readable-stream/",\ + "packageDependencies": [\ + ["inherits", "npm:2.0.4"],\ + ["readable-stream", "npm:3.6.2"],\ + ["string_decoder", "npm:1.3.0"],\ + ["util-deprecate", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["readdirp", [\ + ["npm:4.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/readdirp-npm-4.1.2-3440472afe-10c0.zip/node_modules/readdirp/",\ + "packageDependencies": [\ + ["readdirp", "npm:4.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["registry-auth-token", [\ + ["npm:5.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/registry-auth-token-npm-5.1.0-0b41e3c979-10c0.zip/node_modules/registry-auth-token/",\ + "packageDependencies": [\ + ["@pnpm/npm-conf", "npm:2.3.1"],\ + ["registry-auth-token", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["resolve-from", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/resolve-from-npm-4.0.0-f758ec21bf-10c0.zip/node_modules/resolve-from/",\ + "packageDependencies": [\ + ["resolve-from", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["restore-cursor", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/restore-cursor-npm-3.1.0-52c5a4c98f-10c0.zip/node_modules/restore-cursor/",\ + "packageDependencies": [\ + ["onetime", "npm:5.1.2"],\ + ["restore-cursor", "npm:3.1.0"],\ + ["signal-exit", "npm:3.0.7"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["reusify", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/reusify-npm-1.1.0-96242be57f-10c0.zip/node_modules/reusify/",\ + "packageDependencies": [\ + ["reusify", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["rimraf", [\ + ["npm:2.7.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/rimraf-npm-2.7.1-9a71f3cc37-10c0.zip/node_modules/rimraf/",\ + "packageDependencies": [\ + ["glob", "npm:7.2.3"],\ + ["rimraf", "npm:2.7.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["run-applescript", [\ + ["npm:7.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/run-applescript-npm-7.0.0-b061c2c4fa-10c0.zip/node_modules/run-applescript/",\ + "packageDependencies": [\ + ["run-applescript", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["run-parallel", [\ + ["npm:1.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/run-parallel-npm-1.2.0-3f47ff2034-10c0.zip/node_modules/run-parallel/",\ + "packageDependencies": [\ + ["queue-microtask", "npm:1.2.3"],\ + ["run-parallel", "npm:1.2.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["safe-buffer", [\ + ["npm:5.2.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/safe-buffer-npm-5.2.1-3481c8aa9b-10c0.zip/node_modules/safe-buffer/",\ + "packageDependencies": [\ + ["safe-buffer", "npm:5.2.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["safe-regex-test", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/safe-regex-test-npm-1.1.0-453eb81b83-10c0.zip/node_modules/safe-regex-test/",\ + "packageDependencies": [\ + ["call-bound", "npm:1.0.4"],\ + ["es-errors", "npm:1.3.0"],\ + ["is-regex", "npm:1.2.1"],\ + ["safe-regex-test", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["safer-buffer", [\ + ["npm:2.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/safer-buffer-npm-2.1.2-8d5c0b705e-10c0.zip/node_modules/safer-buffer/",\ + "packageDependencies": [\ + ["safer-buffer", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["semver", [\ + ["npm:7.3.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/semver-npm-7.3.5-618cf5db6a-10c0.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["lru-cache", "npm:6.0.0"],\ + ["semver", "npm:7.3.5"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.7.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/semver-npm-7.7.1-4572475307-10c0.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["semver", "npm:7.7.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.7.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/semver-npm-7.7.2-dfc3bc5ec9-10c0.zip/node_modules/semver/",\ + "packageDependencies": [\ + ["semver", "npm:7.7.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["set-function-length", [\ + ["npm:1.2.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/set-function-length-npm-1.2.2-243073748b-10c0.zip/node_modules/set-function-length/",\ + "packageDependencies": [\ + ["define-data-property", "npm:1.1.4"],\ + ["es-errors", "npm:1.3.0"],\ + ["function-bind", "npm:1.1.2"],\ + ["get-intrinsic", "npm:1.3.0"],\ + ["gopd", "npm:1.2.0"],\ + ["has-property-descriptors", "npm:1.0.2"],\ + ["set-function-length", "npm:1.2.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-command", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/shebang-command-npm-2.0.0-eb2b01921d-10c0.zip/node_modules/shebang-command/",\ + "packageDependencies": [\ + ["shebang-command", "npm:2.0.0"],\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["shebang-regex", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/shebang-regex-npm-3.0.0-899a0cd65e-10c0.zip/node_modules/shebang-regex/",\ + "packageDependencies": [\ + ["shebang-regex", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["signal-exit", [\ + ["npm:3.0.7", {\ + "packageLocation": "../../../../.yarn/berry/cache/signal-exit-npm-3.0.7-bd270458a3-10c0.zip/node_modules/signal-exit/",\ + "packageDependencies": [\ + ["signal-exit", "npm:3.0.7"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:4.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/signal-exit-npm-4.1.0-61fb957687-10c0.zip/node_modules/signal-exit/",\ + "packageDependencies": [\ + ["signal-exit", "npm:4.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["slash", [\ + ["npm:3.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/slash-npm-3.0.0-b87de2279a-10c0.zip/node_modules/slash/",\ + "packageDependencies": [\ + ["slash", "npm:3.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["source-map", [\ + ["npm:0.6.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/source-map-npm-0.6.1-1a3621db16-10c0.zip/node_modules/source-map/",\ + "packageDependencies": [\ + ["source-map", "npm:0.6.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["source-map-support", [\ + ["npm:0.5.21", {\ + "packageLocation": "../../../../.yarn/berry/cache/source-map-support-npm-0.5.21-09ca99e250-10c0.zip/node_modules/source-map-support/",\ + "packageDependencies": [\ + ["buffer-from", "npm:1.1.2"],\ + ["source-map", "npm:0.6.1"],\ + ["source-map-support", "npm:0.5.21"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stream-chain", [\ + ["npm:2.2.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/stream-chain-npm-2.2.5-ad363478fb-10c0.zip/node_modules/stream-chain/",\ + "packageDependencies": [\ + ["stream-chain", "npm:2.2.5"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stream-json", [\ + ["npm:1.9.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/stream-json-npm-1.9.1-067a312ba9-10c0.zip/node_modules/stream-json/",\ + "packageDependencies": [\ + ["stream-chain", "npm:2.2.5"],\ + ["stream-json", "npm:1.9.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["stream-to-it", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/stream-to-it-npm-1.0.1-8920c7a1b8-10c0.zip/node_modules/stream-to-it/",\ + "packageDependencies": [\ + ["it-stream-types", "npm:2.0.2"],\ + ["stream-to-it", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["streamsearch", [\ + ["npm:1.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/streamsearch-npm-1.1.0-fc3ad6536d-10c0.zip/node_modules/streamsearch/",\ + "packageDependencies": [\ + ["streamsearch", "npm:1.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["string-width", [\ + ["npm:4.2.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/string-width-npm-4.2.3-2c27177bae-10c0.zip/node_modules/string-width/",\ + "packageDependencies": [\ + ["emoji-regex", "npm:8.0.0"],\ + ["is-fullwidth-code-point", "npm:3.0.0"],\ + ["string-width", "npm:4.2.3"],\ + ["strip-ansi", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:5.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/string-width-npm-5.1.2-bf60531341-10c0.zip/node_modules/string-width/",\ + "packageDependencies": [\ + ["eastasianwidth", "npm:0.2.0"],\ + ["emoji-regex", "npm:9.2.2"],\ + ["string-width", "npm:5.1.2"],\ + ["strip-ansi", "npm:7.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["string_decoder", [\ + ["npm:1.3.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/string_decoder-npm-1.3.0-2422117fd0-10c0.zip/node_modules/string_decoder/",\ + "packageDependencies": [\ + ["safe-buffer", "npm:5.2.1"],\ + ["string_decoder", "npm:1.3.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-ansi", [\ + ["npm:5.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/strip-ansi-npm-5.2.0-275214c316-10c0.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:4.1.1"],\ + ["strip-ansi", "npm:5.2.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:6.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/strip-ansi-npm-6.0.1-caddc7cb40-10c0.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:5.0.1"],\ + ["strip-ansi", "npm:6.0.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/strip-ansi-npm-7.1.0-7453b80b79-10c0.zip/node_modules/strip-ansi/",\ + "packageDependencies": [\ + ["ansi-regex", "npm:6.1.0"],\ + ["strip-ansi", "npm:7.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["strip-final-newline", [\ + ["npm:2.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/strip-final-newline-npm-2.0.0-340c4f7c66-10c0.zip/node_modules/strip-final-newline/",\ + "packageDependencies": [\ + ["strip-final-newline", "npm:2.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["supports-color", [\ + ["npm:5.5.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/supports-color-npm-5.5.0-183ac537bc-10c0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["has-flag", "npm:3.0.0"],\ + ["supports-color", "npm:5.5.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/supports-color-npm-7.2.0-606bfcf7da-10c0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["has-flag", "npm:4.0.0"],\ + ["supports-color", "npm:7.2.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:8.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/supports-color-npm-8.1.1-289e937149-10c0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["has-flag", "npm:4.0.0"],\ + ["supports-color", "npm:8.1.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:9.4.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/supports-color-npm-9.4.0-a415f39758-10c0.zip/node_modules/supports-color/",\ + "packageDependencies": [\ + ["supports-color", "npm:9.4.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tmp", [\ + ["npm:0.0.33", {\ + "packageLocation": "../../../../.yarn/berry/cache/tmp-npm-0.0.33-bcbf65df2a-10c0.zip/node_modules/tmp/",\ + "packageDependencies": [\ + ["os-tmpdir", "npm:1.0.2"],\ + ["tmp", "npm:0.0.33"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:0.2.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/tmp-npm-0.2.3-ac2a701365-10c0.zip/node_modules/tmp/",\ + "packageDependencies": [\ + ["tmp", "npm:0.2.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tmp-promise", [\ + ["npm:3.0.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/tmp-promise-npm-3.0.3-6df4ad8df9-10c0.zip/node_modules/tmp-promise/",\ + "packageDependencies": [\ + ["tmp", "npm:0.2.3"],\ + ["tmp-promise", "npm:3.0.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["to-regex-range", [\ + ["npm:5.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/to-regex-range-npm-5.0.1-f1e8263b00-10c0.zip/node_modules/to-regex-range/",\ + "packageDependencies": [\ + ["is-number", "npm:7.0.0"],\ + ["to-regex-range", "npm:5.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tslib", [\ + ["npm:2.8.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/tslib-npm-2.8.1-66590b21b8-10c0.zip/node_modules/tslib/",\ + "packageDependencies": [\ + ["tslib", "npm:2.8.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["tunnel-agent", [\ + ["npm:0.6.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/tunnel-agent-npm-0.6.0-64345ab7eb-10c0.zip/node_modules/tunnel-agent/",\ + "packageDependencies": [\ + ["safe-buffer", "npm:5.2.1"],\ + ["tunnel-agent", "npm:0.6.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["type-fest", [\ + ["npm:0.21.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/type-fest-npm-0.21.3-5ff2a9c6fd-10c0.zip/node_modules/type-fest/",\ + "packageDependencies": [\ + ["type-fest", "npm:0.21.3"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["uint8-varint", [\ + ["npm:2.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/uint8-varint-npm-2.0.4-4f71c000d9-10c0.zip/node_modules/uint8-varint/",\ + "packageDependencies": [\ + ["uint8-varint", "npm:2.0.4"],\ + ["uint8arraylist", "npm:2.4.8"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["uint8arraylist", [\ + ["npm:2.4.8", {\ + "packageLocation": "../../../../.yarn/berry/cache/uint8arraylist-npm-2.4.8-dd29fc4629-10c0.zip/node_modules/uint8arraylist/",\ + "packageDependencies": [\ + ["uint8arraylist", "npm:2.4.8"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["uint8arrays", [\ + ["npm:5.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/uint8arrays-npm-5.1.0-0f21742d38-10c0.zip/node_modules/uint8arrays/",\ + "packageDependencies": [\ + ["multiformats", "npm:13.3.2"],\ + ["uint8arrays", "npm:5.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["undici", [\ + ["npm:7.9.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/undici-npm-7.9.0-4d29a0710d-10c0.zip/node_modules/undici/",\ + "packageDependencies": [\ + ["undici", "npm:7.9.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["undici-types", [\ + ["npm:6.21.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/undici-types-npm-6.21.0-eb2b0ed56a-10c0.zip/node_modules/undici-types/",\ + "packageDependencies": [\ + ["undici-types", "npm:6.21.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["universalify", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/universalify-npm-2.0.1-040ba5a21e-10c0.zip/node_modules/universalify/",\ + "packageDependencies": [\ + ["universalify", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["urlpattern-polyfill", [\ + ["npm:10.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/urlpattern-polyfill-npm-10.0.0-b0285f353c-10c0.zip/node_modules/urlpattern-polyfill/",\ + "packageDependencies": [\ + ["urlpattern-polyfill", "npm:10.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["util", [\ + ["npm:0.12.5", {\ + "packageLocation": "../../../../.yarn/berry/cache/util-npm-0.12.5-3668276f26-10c0.zip/node_modules/util/",\ + "packageDependencies": [\ + ["inherits", "npm:2.0.4"],\ + ["is-arguments", "npm:1.2.0"],\ + ["is-generator-function", "npm:1.1.0"],\ + ["is-typed-array", "npm:1.1.15"],\ + ["util", "npm:0.12.5"],\ + ["which-typed-array", "npm:1.1.19"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["util-deprecate", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/util-deprecate-npm-1.0.2-e3fe1a219c-10c0.zip/node_modules/util-deprecate/",\ + "packageDependencies": [\ + ["util-deprecate", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["uuid", [\ + ["npm:8.3.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/uuid-npm-8.3.2-eca0baba53-10c0.zip/node_modules/uuid/",\ + "packageDependencies": [\ + ["uuid", "npm:8.3.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wabt", [\ + ["npm:1.0.24", {\ + "packageLocation": "../../../../.yarn/berry/cache/wabt-npm-1.0.24-460c5d6b25-10c0.zip/node_modules/wabt/",\ + "packageDependencies": [\ + ["wabt", "npm:1.0.24"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wcwidth", [\ + ["npm:1.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/wcwidth-npm-1.0.1-05fa596453-10c0.zip/node_modules/wcwidth/",\ + "packageDependencies": [\ + ["defaults", "npm:1.0.4"],\ + ["wcwidth", "npm:1.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["weald", [\ + ["npm:1.0.4", {\ + "packageLocation": "../../../../.yarn/berry/cache/weald-npm-1.0.4-e226a18973-10c0.zip/node_modules/weald/",\ + "packageDependencies": [\ + ["ms", "npm:3.0.0-canary.1"],\ + ["supports-color", "npm:9.4.0"],\ + ["weald", "npm:1.0.4"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["web3-errors", [\ + ["npm:1.3.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/web3-errors-npm-1.3.1-f86ceda408-10c0.zip/node_modules/web3-errors/",\ + "packageDependencies": [\ + ["web3-errors", "npm:1.3.1"],\ + ["web3-types", "npm:1.10.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["web3-eth-abi", [\ + ["npm:4.4.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/web3-eth-abi-npm-4.4.1-2b7a942e75-10c0.zip/node_modules/web3-eth-abi/",\ + "packageDependencies": [\ + ["abitype", "virtual:2b7a942e757a4401915eb95f023a945e0bd0cb31b5e31db6d67a19c7d14a3118a04af5737ef7325d5f78e592c5a496624023825d09bdee88fec0c763359a8a06#npm:0.7.1"],\ + ["web3-errors", "npm:1.3.1"],\ + ["web3-eth-abi", "npm:4.4.1"],\ + ["web3-types", "npm:1.10.0"],\ + ["web3-utils", "npm:4.3.3"],\ + ["web3-validator", "npm:2.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["web3-types", [\ + ["npm:1.10.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/web3-types-npm-1.10.0-7e3386e0df-10c0.zip/node_modules/web3-types/",\ + "packageDependencies": [\ + ["web3-types", "npm:1.10.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["web3-utils", [\ + ["npm:4.3.3", {\ + "packageLocation": "../../../../.yarn/berry/cache/web3-utils-npm-4.3.3-d266ca398e-10c0.zip/node_modules/web3-utils/",\ + "packageDependencies": [\ + ["ethereum-cryptography", "npm:2.2.1"],\ + ["eventemitter3", "npm:5.0.1"],\ + ["web3-errors", "npm:1.3.1"],\ + ["web3-types", "npm:1.10.0"],\ + ["web3-utils", "npm:4.3.3"],\ + ["web3-validator", "npm:2.0.6"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["web3-validator", [\ + ["npm:2.0.6", {\ + "packageLocation": "../../../../.yarn/berry/cache/web3-validator-npm-2.0.6-91d02cd1f5-10c0.zip/node_modules/web3-validator/",\ + "packageDependencies": [\ + ["ethereum-cryptography", "npm:2.2.1"],\ + ["util", "npm:0.12.5"],\ + ["web3-errors", "npm:1.3.1"],\ + ["web3-types", "npm:1.10.0"],\ + ["web3-validator", "npm:2.0.6"],\ + ["zod", "npm:3.24.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wherearewe", [\ + ["npm:2.0.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/wherearewe-npm-2.0.1-1c830a2fe6-10c0.zip/node_modules/wherearewe/",\ + "packageDependencies": [\ + ["is-electron", "npm:2.2.2"],\ + ["wherearewe", "npm:2.0.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["which", [\ + ["npm:2.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/which-npm-2.0.2-320ddf72f7-10c0.zip/node_modules/which/",\ + "packageDependencies": [\ + ["isexe", "npm:2.0.0"],\ + ["which", "npm:2.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["which-typed-array", [\ + ["npm:1.1.19", {\ + "packageLocation": "../../../../.yarn/berry/cache/which-typed-array-npm-1.1.19-e664d1e89c-10c0.zip/node_modules/which-typed-array/",\ + "packageDependencies": [\ + ["available-typed-arrays", "npm:1.0.7"],\ + ["call-bind", "npm:1.0.8"],\ + ["call-bound", "npm:1.0.4"],\ + ["for-each", "npm:0.3.5"],\ + ["get-proto", "npm:1.0.1"],\ + ["gopd", "npm:1.2.0"],\ + ["has-tostringtag", "npm:1.0.2"],\ + ["which-typed-array", "npm:1.1.19"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["widest-line", [\ + ["npm:3.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/widest-line-npm-3.1.0-717bf2680b-10c0.zip/node_modules/widest-line/",\ + "packageDependencies": [\ + ["string-width", "npm:4.2.3"],\ + ["widest-line", "npm:3.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wordwrap", [\ + ["npm:1.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/wordwrap-npm-1.0.0-ae57a645e8-10c0.zip/node_modules/wordwrap/",\ + "packageDependencies": [\ + ["wordwrap", "npm:1.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wrap-ansi", [\ + ["npm:6.2.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/wrap-ansi-npm-6.2.0-439a7246d8-10c0.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["string-width", "npm:4.2.3"],\ + ["strip-ansi", "npm:6.0.1"],\ + ["wrap-ansi", "npm:6.2.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:7.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-10c0.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:4.3.0"],\ + ["string-width", "npm:4.2.3"],\ + ["strip-ansi", "npm:6.0.1"],\ + ["wrap-ansi", "npm:7.0.0"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:8.1.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-10c0.zip/node_modules/wrap-ansi/",\ + "packageDependencies": [\ + ["ansi-styles", "npm:6.2.1"],\ + ["string-width", "npm:5.1.2"],\ + ["strip-ansi", "npm:7.1.0"],\ + ["wrap-ansi", "npm:8.1.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["wrappy", [\ + ["npm:1.0.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/wrappy-npm-1.0.2-916de4d4b3-10c0.zip/node_modules/wrappy/",\ + "packageDependencies": [\ + ["wrappy", "npm:1.0.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["ws", [\ + ["npm:7.5.10", {\ + "packageLocation": "../../../../.yarn/berry/cache/ws-npm-7.5.10-878ccb886b-10c0.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["ws", "npm:7.5.10"]\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:618233a2dcdf47988a49cce1a4afa1907b85348b81655ae3cef6a0bc15177dee76d9cd59fec5478d0d08c26c65adf770148c58f3fc1deba135dfe9b9634c5fc1#npm:7.5.10", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-a086fb41e8/5/.yarn/berry/cache/ws-npm-7.5.10-878ccb886b-10c0.zip/node_modules/ws/",\ + "packageDependencies": [\ + ["@types/bufferutil", null],\ + ["@types/utf-8-validate", null],\ + ["bufferutil", null],\ + ["utf-8-validate", null],\ + ["ws", "virtual:618233a2dcdf47988a49cce1a4afa1907b85348b81655ae3cef6a0bc15177dee76d9cd59fec5478d0d08c26c65adf770148c58f3fc1deba135dfe9b9634c5fc1#npm:7.5.10"]\ + ],\ + "packagePeers": [\ + "@types/bufferutil",\ + "@types/utf-8-validate",\ + "bufferutil",\ + "utf-8-validate"\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yallist", [\ + ["npm:4.0.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/yallist-npm-4.0.0-b493d9e907-10c0.zip/node_modules/yallist/",\ + "packageDependencies": [\ + ["yallist", "npm:4.0.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yaml", [\ + ["npm:1.10.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/yaml-npm-1.10.2-0e780aebdf-10c0.zip/node_modules/yaml/",\ + "packageDependencies": [\ + ["yaml", "npm:1.10.2"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.7.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/yaml-npm-2.7.1-9e92f81b45-10c0.zip/node_modules/yaml/",\ + "packageDependencies": [\ + ["yaml", "npm:2.7.1"]\ + ],\ + "linkType": "HARD"\ + }],\ + ["npm:2.8.0", {\ + "packageLocation": "../../../../.yarn/berry/cache/yaml-npm-2.8.0-01747dd315-10c0.zip/node_modules/yaml/",\ + "packageDependencies": [\ + ["yaml", "npm:2.8.0"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yargs-parser", [\ + ["npm:21.1.1", {\ + "packageLocation": "../../../../.yarn/berry/cache/yargs-parser-npm-21.1.1-8fdc003314-10c0.zip/node_modules/yargs-parser/",\ + "packageDependencies": [\ + ["yargs-parser", "npm:21.1.1"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["yoctocolors-cjs", [\ + ["npm:2.1.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/yoctocolors-cjs-npm-2.1.2-52d47e1a9b-10c0.zip/node_modules/yoctocolors-cjs/",\ + "packageDependencies": [\ + ["yoctocolors-cjs", "npm:2.1.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]],\ + ["zod", [\ + ["npm:3.24.2", {\ + "packageLocation": "../../../../.yarn/berry/cache/zod-npm-3.24.2-ab80dc0969-10c0.zip/node_modules/zod/",\ + "packageDependencies": [\ + ["zod", "npm:3.24.2"]\ + ],\ + "linkType": "HARD"\ + }]\ + ]]\ + ]\ +}'; + +function $$SETUP_STATE(hydrateRuntimeState, basePath) { + return hydrateRuntimeState(JSON.parse(RAW_RUNTIME_STATE), {basePath: basePath || __dirname}); +} + +const fs = require('fs'); +const path = require('path'); +const crypto = require('crypto'); +const os = require('os'); +const events = require('events'); +const nodeUtils = require('util'); +const stream = require('stream'); +const zlib = require('zlib'); +const require$$0 = require('module'); +const StringDecoder = require('string_decoder'); +const url = require('url'); +const buffer = require('buffer'); +const readline = require('readline'); +const assert = require('assert'); + +const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + const n = Object.create(null); + if (e) { + for (const k in e) { + if (k !== 'default') { + const d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: () => e[k] + }); + } + } + } + n.default = e; + return Object.freeze(n); +} + +const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); +const path__default = /*#__PURE__*/_interopDefaultLegacy(path); +const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils); +const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); +const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0); +const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder); +const buffer__default = /*#__PURE__*/_interopDefaultLegacy(buffer); +const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert); + +const S_IFMT = 61440; +const S_IFDIR = 16384; +const S_IFREG = 32768; +const S_IFLNK = 40960; +const SAFE_TIME = 456789e3; + +function makeError$1(code, message) { + return Object.assign(new Error(`${code}: ${message}`), { code }); +} +function EBUSY(message) { + return makeError$1(`EBUSY`, message); +} +function ENOSYS(message, reason) { + return makeError$1(`ENOSYS`, `${message}, ${reason}`); +} +function EINVAL(reason) { + return makeError$1(`EINVAL`, `invalid argument, ${reason}`); +} +function EBADF(reason) { + return makeError$1(`EBADF`, `bad file descriptor, ${reason}`); +} +function ENOENT(reason) { + return makeError$1(`ENOENT`, `no such file or directory, ${reason}`); +} +function ENOTDIR(reason) { + return makeError$1(`ENOTDIR`, `not a directory, ${reason}`); +} +function EISDIR(reason) { + return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`); +} +function EEXIST(reason) { + return makeError$1(`EEXIST`, `file already exists, ${reason}`); +} +function EROFS(reason) { + return makeError$1(`EROFS`, `read-only filesystem, ${reason}`); +} +function ENOTEMPTY(reason) { + return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`); +} +function EOPNOTSUPP(reason) { + return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`); +} +function ERR_DIR_CLOSED() { + return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`); +} + +const DEFAULT_MODE = S_IFREG | 420; +class StatEntry { + uid = 0; + gid = 0; + size = 0; + blksize = 0; + atimeMs = 0; + mtimeMs = 0; + ctimeMs = 0; + birthtimeMs = 0; + atime = /* @__PURE__ */ new Date(0); + mtime = /* @__PURE__ */ new Date(0); + ctime = /* @__PURE__ */ new Date(0); + birthtime = /* @__PURE__ */ new Date(0); + dev = 0; + ino = 0; + mode = DEFAULT_MODE; + nlink = 1; + rdev = 0; + blocks = 1; + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & S_IFMT) === S_IFDIR; + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & S_IFMT) === S_IFREG; + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & S_IFMT) === S_IFLNK; + } +} +class BigIntStatsEntry { + uid = BigInt(0); + gid = BigInt(0); + size = BigInt(0); + blksize = BigInt(0); + atimeMs = BigInt(0); + mtimeMs = BigInt(0); + ctimeMs = BigInt(0); + birthtimeMs = BigInt(0); + atimeNs = BigInt(0); + mtimeNs = BigInt(0); + ctimeNs = BigInt(0); + birthtimeNs = BigInt(0); + atime = /* @__PURE__ */ new Date(0); + mtime = /* @__PURE__ */ new Date(0); + ctime = /* @__PURE__ */ new Date(0); + birthtime = /* @__PURE__ */ new Date(0); + dev = BigInt(0); + ino = BigInt(0); + mode = BigInt(DEFAULT_MODE); + nlink = BigInt(1); + rdev = BigInt(0); + blocks = BigInt(1); + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR); + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG); + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK); + } +} +function makeDefaultStats() { + return new StatEntry(); +} +function clearStats(stats) { + for (const key in stats) { + if (Object.hasOwn(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + stats[key] = 0; + } else if (typeof element === `bigint`) { + stats[key] = BigInt(0); + } else if (nodeUtils__namespace.types.isDate(element)) { + stats[key] = /* @__PURE__ */ new Date(0); + } + } + } + return stats; +} +function convertToBigIntStats(stats) { + const bigintStats = new BigIntStatsEntry(); + for (const key in stats) { + if (Object.hasOwn(stats, key)) { + const element = stats[key]; + if (typeof element === `number`) { + bigintStats[key] = BigInt(element); + } else if (nodeUtils__namespace.types.isDate(element)) { + bigintStats[key] = new Date(element); + } + } + } + bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6); + bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6); + bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6); + bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6); + return bigintStats; +} +function areStatsEqual(a, b) { + if (a.atimeMs !== b.atimeMs) + return false; + if (a.birthtimeMs !== b.birthtimeMs) + return false; + if (a.blksize !== b.blksize) + return false; + if (a.blocks !== b.blocks) + return false; + if (a.ctimeMs !== b.ctimeMs) + return false; + if (a.dev !== b.dev) + return false; + if (a.gid !== b.gid) + return false; + if (a.ino !== b.ino) + return false; + if (a.isBlockDevice() !== b.isBlockDevice()) + return false; + if (a.isCharacterDevice() !== b.isCharacterDevice()) + return false; + if (a.isDirectory() !== b.isDirectory()) + return false; + if (a.isFIFO() !== b.isFIFO()) + return false; + if (a.isFile() !== b.isFile()) + return false; + if (a.isSocket() !== b.isSocket()) + return false; + if (a.isSymbolicLink() !== b.isSymbolicLink()) + return false; + if (a.mode !== b.mode) + return false; + if (a.mtimeMs !== b.mtimeMs) + return false; + if (a.nlink !== b.nlink) + return false; + if (a.rdev !== b.rdev) + return false; + if (a.size !== b.size) + return false; + if (a.uid !== b.uid) + return false; + const aN = a; + const bN = b; + if (aN.atimeNs !== bN.atimeNs) + return false; + if (aN.mtimeNs !== bN.mtimeNs) + return false; + if (aN.ctimeNs !== bN.ctimeNs) + return false; + if (aN.birthtimeNs !== bN.birthtimeNs) + return false; + return true; +} + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const Filename = { + home: `~`, + nodeModules: `node_modules`, + manifest: `package.json`, + lockfile: `yarn.lock`, + virtual: `__virtual__`, + /** + * @deprecated + */ + pnpJs: `.pnp.js`, + pnpCjs: `.pnp.cjs`, + pnpData: `.pnp.data.json`, + pnpEsmLoader: `.pnp.loader.mjs`, + rc: `.yarnrc.yml`, + env: `.env` +}; +const npath = Object.create(path__default.default); +const ppath = Object.create(path__default.default.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; +if (process.platform === `win32`) { + ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path__default.default.posix.resolve(...segments); + } else { + return path__default.default.posix.resolve(ppath.cwd(), ...segments); + } + }; +} +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePathWin32(p) { + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePathWin32(p) { + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; +const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +const defaultTimeMs = defaultTime.getTime(); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { + if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { + postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch { + return null; + } +} +async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { + const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); + const defaultMode = 420; + const sourceMode = sourceStat.mode & 511; + const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; + const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); + let AtomicBehavior; + ((AtomicBehavior2) => { + AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; + AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; + })(AtomicBehavior || (AtomicBehavior = {})); + let atomicBehavior = 1 /* Rename */; + let indexStat = await maybeLStat(destinationFs, indexPath); + if (destinationStat) { + const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; + const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; + if (isDestinationHardlinkedFromIndex) { + if (isIndexModified && linkStrategy.autoRepair) { + atomicBehavior = 0 /* Lock */; + indexStat = null; + } + } + if (!isDestinationHardlinkedFromIndex) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + } + const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; + let tempPathCleaned = false; + prelayout.push(async () => { + if (!indexStat) { + if (atomicBehavior === 0 /* Lock */) { + await destinationFs.lockPromise(indexPath, async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(indexPath, content); + }); + } + if (atomicBehavior === 1 /* Rename */ && tempPath) { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(tempPath, content); + try { + await destinationFs.linkPromise(tempPath, indexPath); + } catch (err) { + if (err.code === `EEXIST`) { + tempPathCleaned = true; + await destinationFs.unlinkPromise(tempPath); + } else { + throw err; + } + } + } + } + if (!destinationStat) { + await destinationFs.linkPromise(indexPath, destination); + } + }); + postlayout.push(async () => { + if (!indexStat) { + await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); + if (sourceMode !== defaultMode) { + await destinationFs.chmodPromise(indexPath, sourceMode); + } + } + if (tempPath && !tempPathCleaned) { + await destinationFs.unlinkPromise(tempPath); + } + }); + return false; +} +async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(destination, content); + }); + return true; +} +async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (opts.linkStrategy?.type === `HardlinkFromIndex`) { + return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); + } else { + return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } +} +async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +class CustomDir { + constructor(path, nextDirent, opts = {}) { + this.path = path; + this.nextDirent = nextDirent; + this.opts = opts; + } + closed = false; + throwIfClosed() { + if (this.closed) { + throw ERR_DIR_CLOSED(); + } + } + async *[Symbol.asyncIterator]() { + try { + let dirent; + while ((dirent = await this.read()) !== null) { + yield dirent; + } + } finally { + await this.close(); + } + } + read(cb) { + const dirent = this.readSync(); + if (typeof cb !== `undefined`) + return cb(null, dirent); + return Promise.resolve(dirent); + } + readSync() { + this.throwIfClosed(); + return this.nextDirent(); + } + close(cb) { + this.closeSync(); + if (typeof cb !== `undefined`) + return cb(null); + return Promise.resolve(); + } + closeSync() { + this.throwIfClosed(); + this.opts.onClose?.(); + this.closed = true; + } +} +function opendir(fakeFs, path, entries, opts) { + const nextDirent = () => { + const filename = entries.shift(); + if (typeof filename === `undefined`) + return null; + const entryPath = fakeFs.pathUtils.join(path, filename); + return Object.assign(fakeFs.statSync(entryPath), { + name: filename, + path: void 0 + }); + }; + return new CustomDir(path, nextDirent, opts); +} + +function assertStatus(current, expected) { + if (current !== expected) { + throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`); + } +} +class CustomStatWatcher extends events.EventEmitter { + fakeFs; + path; + bigint; + status = "ready" /* Ready */; + changeListeners = /* @__PURE__ */ new Map(); + lastStats; + startTimeout = null; + static create(fakeFs, path, opts) { + const statWatcher = new CustomStatWatcher(fakeFs, path, opts); + statWatcher.start(); + return statWatcher; + } + constructor(fakeFs, path, { bigint = false } = {}) { + super(); + this.fakeFs = fakeFs; + this.path = path; + this.bigint = bigint; + this.lastStats = this.stat(); + } + start() { + assertStatus(this.status, "ready" /* Ready */); + this.status = "running" /* Running */; + this.startTimeout = setTimeout(() => { + this.startTimeout = null; + if (!this.fakeFs.existsSync(this.path)) { + this.emit("change" /* Change */, this.lastStats, this.lastStats); + } + }, 3); + } + stop() { + assertStatus(this.status, "running" /* Running */); + this.status = "stopped" /* Stopped */; + if (this.startTimeout !== null) { + clearTimeout(this.startTimeout); + this.startTimeout = null; + } + this.emit("stop" /* Stop */); + } + stat() { + try { + return this.fakeFs.statSync(this.path, { bigint: this.bigint }); + } catch { + const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry(); + return clearStats(statInstance); + } + } + /** + * Creates an interval whose callback compares the current stats with the previous stats and notifies all listeners in case of changes. + * + * @param opts.persistent Decides whether the interval should be immediately unref-ed. + */ + makeInterval(opts) { + const interval = setInterval(() => { + const currentStats = this.stat(); + const previousStats = this.lastStats; + if (areStatsEqual(currentStats, previousStats)) + return; + this.lastStats = currentStats; + this.emit("change" /* Change */, currentStats, previousStats); + }, opts.interval); + return opts.persistent ? interval : interval.unref(); + } + /** + * Registers a listener and assigns it an interval. + */ + registerChangeListener(listener, opts) { + this.addListener("change" /* Change */, listener); + this.changeListeners.set(listener, this.makeInterval(opts)); + } + /** + * Unregisters the listener and clears the assigned interval. + */ + unregisterChangeListener(listener) { + this.removeListener("change" /* Change */, listener); + const interval = this.changeListeners.get(listener); + if (typeof interval !== `undefined`) + clearInterval(interval); + this.changeListeners.delete(listener); + } + /** + * Unregisters all listeners and clears all assigned intervals. + */ + unregisterAllChangeListeners() { + for (const listener of this.changeListeners.keys()) { + this.unregisterChangeListener(listener); + } + } + hasChangeListeners() { + return this.changeListeners.size > 0; + } + /** + * Refs all stored intervals. + */ + ref() { + for (const interval of this.changeListeners.values()) + interval.ref(); + return this; + } + /** + * Unrefs all stored intervals. + */ + unref() { + for (const interval of this.changeListeners.values()) + interval.unref(); + return this; + } +} + +const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap(); +function watchFile(fakeFs, path, a, b) { + let bigint; + let persistent; + let interval; + let listener; + switch (typeof a) { + case `function`: + { + bigint = false; + persistent = true; + interval = 5007; + listener = a; + } + break; + default: + { + ({ + bigint = false, + persistent = true, + interval = 5007 + } = a); + listener = b; + } + break; + } + let statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map()); + let statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) { + statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint }); + statWatchers.set(path, statWatcher); + } + statWatcher.registerChangeListener(listener, { persistent, interval }); + return statWatcher; +} +function unwatchFile(fakeFs, path, cb) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + const statWatcher = statWatchers.get(path); + if (typeof statWatcher === `undefined`) + return; + if (typeof cb === `undefined`) + statWatcher.unregisterAllChangeListeners(); + else + statWatcher.unregisterChangeListener(cb); + if (!statWatcher.hasChangeListeners()) { + statWatcher.stop(); + statWatchers.delete(path); + } +} +function unwatchAllFiles(fakeFs) { + const statWatchers = statWatchersByFakeFS.get(fakeFs); + if (typeof statWatchers === `undefined`) + return; + for (const path of statWatchers.keys()) { + unwatchFile(fakeFs, path); + } +} + +class FakeFS { + pathUtils; + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async checksumFilePromise(path, { algorithm = `sha512` } = {}) { + const fd = await this.openPromise(path, `r`); + try { + const CHUNK_SIZE = 65536; + const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); + const hash = crypto.createHash(algorithm); + let bytesRead = 0; + while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) + hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); + return hash.digest(`hex`); + } finally { + await this.closePromise(fd); + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} +`); + } + writeJsonSync(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return this.writeFileSync(p, `${JSON.stringify(data, null, space)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + await this.lutimesPromise(p, stat.atime, stat.mtime); + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + this.lutimesSync(p, stat.atime, stat.mtime); + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return os.EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); + } + lutimesSync(p, atime, mtime) { + return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async rmPromise(p, opts) { + return this.baseFs.rmPromise(this.mapToBase(p), opts); + } + rmSync(p, opts) { + return this.baseFs.rmSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + readFileSync(p, encoding) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +function direntToPortable(dirent) { + const portableDirent = dirent; + if (typeof dirent.path === `string`) + portableDirent.path = npath.toPortablePath(dirent.path); + return portableDirent; +} +class NodeFS extends BasePortableFakeFS { + realFs; + constructor(realFs = fs__default.default) { + super(); + this.realFs = realFs; + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSync(p, atime, mtime) { + this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async rmPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmSync(p, opts) { + return this.realFs.rmSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + readdirSync(p, opts) { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +const MOUNT_MASK = 4278190080; +class MountFS extends BasePortableFakeFS { + baseFs; + mountInstances; + fdMap = /* @__PURE__ */ new Map(); + nextFd = 3; + factoryPromise; + factorySync; + filter; + getMountPoint; + magic; + maxAge; + maxOpenFiles; + typeCheck; + isMount = /* @__PURE__ */ new Set(); + notMount = /* @__PURE__ */ new Set(); + realPaths = /* @__PURE__ */ new Map(); + constructor({ baseFs = new NodeFS(), filter = null, magicByte = 42, maxOpenFiles = Infinity, useCache = true, maxAge = 5e3, typeCheck = fs.constants.S_IFREG, getMountPoint, factoryPromise, factorySync }) { + if (Math.floor(magicByte) !== magicByte || !(magicByte > 1 && magicByte <= 127)) + throw new Error(`The magic byte must be set to a round value between 1 and 127 included`); + super(); + this.baseFs = baseFs; + this.mountInstances = useCache ? /* @__PURE__ */ new Map() : null; + this.factoryPromise = factoryPromise; + this.factorySync = factorySync; + this.filter = filter; + this.getMountPoint = getMountPoint; + this.magic = magicByte << 24; + this.maxAge = maxAge; + this.maxOpenFiles = maxOpenFiles; + this.typeCheck = typeCheck; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + saveAndClose() { + unwatchAllFiles(this); + if (this.mountInstances) { + for (const [path, { childFs }] of this.mountInstances.entries()) { + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + } + } + } + discardAndClose() { + unwatchAllFiles(this); + if (this.mountInstances) { + for (const [path, { childFs }] of this.mountInstances.entries()) { + childFs.discardAndClose?.(); + this.mountInstances.delete(path); + } + } + } + resolve(p) { + return this.baseFs.resolve(p); + } + remapFd(mountFs, fd) { + const remappedFd = this.nextFd++ | this.magic; + this.fdMap.set(remappedFd, [mountFs, fd]); + return remappedFd; + } + async openPromise(p, flags, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.openPromise(p, flags, mode); + }, async (mountFs, { subPath }) => { + return this.remapFd(mountFs, await mountFs.openPromise(subPath, flags, mode)); + }); + } + openSync(p, flags, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.openSync(p, flags, mode); + }, (mountFs, { subPath }) => { + return this.remapFd(mountFs, mountFs.openSync(subPath, flags, mode)); + }); + } + async opendirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.opendirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.opendirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + opendirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.opendirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.opendirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readPromise(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const [mountFs, realFd] = entry; + return await mountFs.readPromise(realFd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.readSync(fd, buffer, offset, length, position); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`readSync`); + const [mountFs, realFd] = entry; + return mountFs.readSync(realFd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`write`); + const [mountFs, realFd] = entry; + if (typeof buffer === `string`) { + return await mountFs.writePromise(realFd, buffer, offset); + } else { + return await mountFs.writePromise(realFd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if ((fd & MOUNT_MASK) !== this.magic) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`writeSync`); + const [mountFs, realFd] = entry; + if (typeof buffer === `string`) { + return mountFs.writeSync(realFd, buffer, offset); + } else { + return mountFs.writeSync(realFd, buffer, offset, length, position); + } + } + async closePromise(fd) { + if ((fd & MOUNT_MASK) !== this.magic) + return await this.baseFs.closePromise(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`close`); + this.fdMap.delete(fd); + const [mountFs, realFd] = entry; + return await mountFs.closePromise(realFd); + } + closeSync(fd) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.closeSync(fd); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`closeSync`); + this.fdMap.delete(fd); + const [mountFs, realFd] = entry; + return mountFs.closeSync(realFd); + } + createReadStream(p, opts) { + if (p === null) + return this.baseFs.createReadStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createReadStream(p, opts); + }, (mountFs, { archivePath, subPath }) => { + const stream = mountFs.createReadStream(subPath, opts); + stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath)); + return stream; + }); + } + createWriteStream(p, opts) { + if (p === null) + return this.baseFs.createWriteStream(p, opts); + return this.makeCallSync(p, () => { + return this.baseFs.createWriteStream(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.createWriteStream(subPath, opts); + }); + } + async realpathPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.realpathPromise(p); + }, async (mountFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = await this.baseFs.realpathPromise(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await mountFs.realpathPromise(subPath))); + }); + } + realpathSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.realpathSync(p); + }, (mountFs, { archivePath, subPath }) => { + let realArchivePath = this.realPaths.get(archivePath); + if (typeof realArchivePath === `undefined`) { + realArchivePath = this.baseFs.realpathSync(archivePath); + this.realPaths.set(archivePath, realArchivePath); + } + return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, mountFs.realpathSync(subPath))); + }); + } + async existsPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.existsPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.existsPromise(subPath); + }); + } + existsSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.existsSync(p); + }, (mountFs, { subPath }) => { + return mountFs.existsSync(subPath); + }); + } + async accessPromise(p, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.accessPromise(p, mode); + }, async (mountFs, { subPath }) => { + return await mountFs.accessPromise(subPath, mode); + }); + } + accessSync(p, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.accessSync(p, mode); + }, (mountFs, { subPath }) => { + return mountFs.accessSync(subPath, mode); + }); + } + async statPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.statPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.statPromise(subPath, opts); + }); + } + statSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.statSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.statSync(subPath, opts); + }); + } + async fstatPromise(fd, opts) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fstatPromise(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstat`); + const [mountFs, realFd] = entry; + return mountFs.fstatPromise(realFd, opts); + } + fstatSync(fd, opts) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fstatSync(fd, opts); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const [mountFs, realFd] = entry; + return mountFs.fstatSync(realFd, opts); + } + async lstatPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lstatPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.lstatPromise(subPath, opts); + }); + } + lstatSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.lstatSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.lstatSync(subPath, opts); + }); + } + async fchmodPromise(fd, mask) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchmodPromise(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmod`); + const [mountFs, realFd] = entry; + return mountFs.fchmodPromise(realFd, mask); + } + fchmodSync(fd, mask) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchmodSync(fd, mask); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchmodSync`); + const [mountFs, realFd] = entry; + return mountFs.fchmodSync(realFd, mask); + } + async chmodPromise(p, mask) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chmodPromise(p, mask); + }, async (mountFs, { subPath }) => { + return await mountFs.chmodPromise(subPath, mask); + }); + } + chmodSync(p, mask) { + return this.makeCallSync(p, () => { + return this.baseFs.chmodSync(p, mask); + }, (mountFs, { subPath }) => { + return mountFs.chmodSync(subPath, mask); + }); + } + async fchownPromise(fd, uid, gid) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchownPromise(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchown`); + const [zipFs, realFd] = entry; + return zipFs.fchownPromise(realFd, uid, gid); + } + fchownSync(fd, uid, gid) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.fchownSync(fd, uid, gid); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fchownSync`); + const [zipFs, realFd] = entry; + return zipFs.fchownSync(realFd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chownPromise(p, uid, gid); + }, async (mountFs, { subPath }) => { + return await mountFs.chownPromise(subPath, uid, gid); + }); + } + chownSync(p, uid, gid) { + return this.makeCallSync(p, () => { + return this.baseFs.chownSync(p, uid, gid); + }, (mountFs, { subPath }) => { + return mountFs.chownSync(subPath, uid, gid); + }); + } + async renamePromise(oldP, newP) { + return await this.makeCallPromise(oldP, async () => { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.renamePromise(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, async (mountFsO, { subPath: subPathO }) => { + return await this.makeCallPromise(newP, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, async (mountFsN, { subPath: subPathN }) => { + if (mountFsO !== mountFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return await mountFsO.renamePromise(subPathO, subPathN); + } + }); + }); + } + renameSync(oldP, newP) { + return this.makeCallSync(oldP, () => { + return this.makeCallSync(newP, () => { + return this.baseFs.renameSync(oldP, newP); + }, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, (mountFsO, { subPath: subPathO }) => { + return this.makeCallSync(newP, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, (mountFsN, { subPath: subPathN }) => { + if (mountFsO !== mountFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } else { + return mountFsO.renameSync(subPathO, subPathN); + } + }); + }); + } + async copyFilePromise(sourceP, destP, flags = 0) { + const fallback = async (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = await sourceFs.readFilePromise(sourceP2); + } catch { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + await destFs.writeFilePromise(destP2, content); + }; + return await this.makeCallPromise(sourceP, async () => { + return await this.makeCallPromise(destP, async () => { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + }, async (mountFsD, { subPath: subPathD }) => { + return await fallback(this.baseFs, sourceP, mountFsD, subPathD); + }); + }, async (mountFsS, { subPath: subPathS }) => { + return await this.makeCallPromise(destP, async () => { + return await fallback(mountFsS, subPathS, this.baseFs, destP); + }, async (mountFsD, { subPath: subPathD }) => { + if (mountFsS !== mountFsD) { + return await fallback(mountFsS, subPathS, mountFsD, subPathD); + } else { + return await mountFsS.copyFilePromise(subPathS, subPathD, flags); + } + }); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + const fallback = (sourceFs, sourceP2, destFs, destP2) => { + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` }); + if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` }); + let content; + try { + content = sourceFs.readFileSync(sourceP2); + } catch { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` }); + } + destFs.writeFileSync(destP2, content); + }; + return this.makeCallSync(sourceP, () => { + return this.makeCallSync(destP, () => { + return this.baseFs.copyFileSync(sourceP, destP, flags); + }, (mountFsD, { subPath: subPathD }) => { + return fallback(this.baseFs, sourceP, mountFsD, subPathD); + }); + }, (mountFsS, { subPath: subPathS }) => { + return this.makeCallSync(destP, () => { + return fallback(mountFsS, subPathS, this.baseFs, destP); + }, (mountFsD, { subPath: subPathD }) => { + if (mountFsS !== mountFsD) { + return fallback(mountFsS, subPathS, mountFsD, subPathD); + } else { + return mountFsS.copyFileSync(subPathS, subPathD, flags); + } + }); + }); + } + async appendFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.appendFilePromise(p, content, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.appendFilePromise(subPath, content, opts); + }); + } + appendFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.appendFileSync(p, content, opts); + }, (mountFs, { subPath }) => { + return mountFs.appendFileSync(subPath, content, opts); + }); + } + async writeFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.writeFilePromise(p, content, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.writeFilePromise(subPath, content, opts); + }); + } + writeFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.writeFileSync(p, content, opts); + }, (mountFs, { subPath }) => { + return mountFs.writeFileSync(subPath, content, opts); + }); + } + async unlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.unlinkPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.unlinkPromise(subPath); + }); + } + unlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.unlinkSync(p); + }, (mountFs, { subPath }) => { + return mountFs.unlinkSync(subPath); + }); + } + async utimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.utimesPromise(p, atime, mtime); + }, async (mountFs, { subPath }) => { + return await mountFs.utimesPromise(subPath, atime, mtime); + }); + } + utimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.utimesSync(p, atime, mtime); + }, (mountFs, { subPath }) => { + return mountFs.utimesSync(subPath, atime, mtime); + }); + } + async lutimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lutimesPromise(p, atime, mtime); + }, async (mountFs, { subPath }) => { + return await mountFs.lutimesPromise(subPath, atime, mtime); + }); + } + lutimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.lutimesSync(p, atime, mtime); + }, (mountFs, { subPath }) => { + return mountFs.lutimesSync(subPath, atime, mtime); + }); + } + async mkdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.mkdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.mkdirPromise(subPath, opts); + }); + } + mkdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.mkdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.mkdirSync(subPath, opts); + }); + } + async rmdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.rmdirPromise(subPath, opts); + }); + } + rmdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.rmdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.rmdirSync(subPath, opts); + }); + } + async rmPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.rmPromise(subPath, opts); + }); + } + rmSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.rmSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.rmSync(subPath, opts); + }); + } + async linkPromise(existingP, newP) { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.linkPromise(existingP, newP); + }, async (mountFs, { subPath }) => { + return await mountFs.linkPromise(existingP, subPath); + }); + } + linkSync(existingP, newP) { + return this.makeCallSync(newP, () => { + return this.baseFs.linkSync(existingP, newP); + }, (mountFs, { subPath }) => { + return mountFs.linkSync(existingP, subPath); + }); + } + async symlinkPromise(target, p, type) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.symlinkPromise(target, p, type); + }, async (mountFs, { subPath }) => { + return await mountFs.symlinkPromise(target, subPath); + }); + } + symlinkSync(target, p, type) { + return this.makeCallSync(p, () => { + return this.baseFs.symlinkSync(target, p, type); + }, (mountFs, { subPath }) => { + return mountFs.symlinkSync(target, subPath); + }); + } + async readFilePromise(p, encoding) { + return this.makeCallPromise(p, async () => { + return await this.baseFs.readFilePromise(p, encoding); + }, async (mountFs, { subPath }) => { + return await mountFs.readFilePromise(subPath, encoding); + }); + } + readFileSync(p, encoding) { + return this.makeCallSync(p, () => { + return this.baseFs.readFileSync(p, encoding); + }, (mountFs, { subPath }) => { + return mountFs.readFileSync(subPath, encoding); + }); + } + async readdirPromise(p, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readdirPromise(p, opts); + }, async (mountFs, { subPath }) => { + return await mountFs.readdirPromise(subPath, opts); + }, { + requireSubpath: false + }); + } + readdirSync(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.readdirSync(p, opts); + }, (mountFs, { subPath }) => { + return mountFs.readdirSync(subPath, opts); + }, { + requireSubpath: false + }); + } + async readlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readlinkPromise(p); + }, async (mountFs, { subPath }) => { + return await mountFs.readlinkPromise(subPath); + }); + } + readlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readlinkSync(p); + }, (mountFs, { subPath }) => { + return mountFs.readlinkSync(subPath); + }); + } + async truncatePromise(p, len) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.truncatePromise(p, len); + }, async (mountFs, { subPath }) => { + return await mountFs.truncatePromise(subPath, len); + }); + } + truncateSync(p, len) { + return this.makeCallSync(p, () => { + return this.baseFs.truncateSync(p, len); + }, (mountFs, { subPath }) => { + return mountFs.truncateSync(subPath, len); + }); + } + async ftruncatePromise(fd, len) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.ftruncatePromise(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncate`); + const [mountFs, realFd] = entry; + return mountFs.ftruncatePromise(realFd, len); + } + ftruncateSync(fd, len) { + if ((fd & MOUNT_MASK) !== this.magic) + return this.baseFs.ftruncateSync(fd, len); + const entry = this.fdMap.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`ftruncateSync`); + const [mountFs, realFd] = entry; + return mountFs.ftruncateSync(realFd, len); + } + watch(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watch( + p, + // @ts-expect-error - reason TBS + a, + b + ); + }, (mountFs, { subPath }) => { + return mountFs.watch( + subPath, + // @ts-expect-error - reason TBS + a, + b + ); + }); + } + watchFile(p, a, b) { + return this.makeCallSync(p, () => { + return this.baseFs.watchFile( + p, + // @ts-expect-error - reason TBS + a, + b + ); + }, () => { + return watchFile(this, p, a, b); + }); + } + unwatchFile(p, cb) { + return this.makeCallSync(p, () => { + return this.baseFs.unwatchFile(p, cb); + }, () => { + return unwatchFile(this, p, cb); + }); + } + async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return await discard(); + const normalizedP = this.resolve(p); + const mountInfo = this.findMount(normalizedP); + if (!mountInfo) + return await discard(); + if (requireSubpath && mountInfo.subPath === `/`) + return await discard(); + return await this.getMountPromise(mountInfo.archivePath, async (mountFs) => await accept(mountFs, mountInfo)); + } + makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { + if (typeof p !== `string`) + return discard(); + const normalizedP = this.resolve(p); + const mountInfo = this.findMount(normalizedP); + if (!mountInfo) + return discard(); + if (requireSubpath && mountInfo.subPath === `/`) + return discard(); + return this.getMountSync(mountInfo.archivePath, (mountFs) => accept(mountFs, mountInfo)); + } + findMount(p) { + if (this.filter && !this.filter.test(p)) + return null; + let filePath = ``; + while (true) { + const pathPartWithArchive = p.substring(filePath.length); + const mountPoint = this.getMountPoint(pathPartWithArchive, filePath); + if (!mountPoint) + return null; + filePath = this.pathUtils.join(filePath, mountPoint); + if (!this.isMount.has(filePath)) { + if (this.notMount.has(filePath)) + continue; + try { + if (this.typeCheck !== null && (this.baseFs.statSync(filePath).mode & fs.constants.S_IFMT) !== this.typeCheck) { + this.notMount.add(filePath); + continue; + } + } catch { + return null; + } + this.isMount.add(filePath); + } + return { + archivePath: filePath, + subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length)) + }; + } + } + limitOpenFilesTimeout = null; + limitOpenFiles(max) { + if (this.mountInstances === null) + return; + const now = Date.now(); + let nextExpiresAt = now + this.maxAge; + let closeCount = max === null ? 0 : this.mountInstances.size - max; + for (const [path, { childFs, expiresAt, refCount }] of this.mountInstances.entries()) { + if (refCount !== 0 || childFs.hasOpenFileHandles?.()) { + continue; + } else if (now >= expiresAt) { + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + closeCount -= 1; + continue; + } else if (max === null || closeCount <= 0) { + nextExpiresAt = expiresAt; + break; + } + childFs.saveAndClose?.(); + this.mountInstances.delete(path); + closeCount -= 1; + } + if (this.limitOpenFilesTimeout === null && (max === null && this.mountInstances.size > 0 || max !== null) && isFinite(nextExpiresAt)) { + this.limitOpenFilesTimeout = setTimeout(() => { + this.limitOpenFilesTimeout = null; + this.limitOpenFiles(null); + }, nextExpiresAt - now).unref(); + } + } + async getMountPromise(p, accept) { + if (this.mountInstances) { + let cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + const createFsInstance = await this.factoryPromise(this.baseFs, p); + cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + cachedMountFs = { + childFs: createFsInstance(), + expiresAt: 0, + refCount: 0 + }; + } + } + this.mountInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.mountInstances.set(p, cachedMountFs); + cachedMountFs.expiresAt = Date.now() + this.maxAge; + cachedMountFs.refCount += 1; + try { + return await accept(cachedMountFs.childFs); + } finally { + cachedMountFs.refCount -= 1; + } + } else { + const mountFs = (await this.factoryPromise(this.baseFs, p))(); + try { + return await accept(mountFs); + } finally { + mountFs.saveAndClose?.(); + } + } + } + getMountSync(p, accept) { + if (this.mountInstances) { + let cachedMountFs = this.mountInstances.get(p); + if (!cachedMountFs) { + cachedMountFs = { + childFs: this.factorySync(this.baseFs, p), + expiresAt: 0, + refCount: 0 + }; + } + this.mountInstances.delete(p); + this.limitOpenFiles(this.maxOpenFiles - 1); + this.mountInstances.set(p, cachedMountFs); + cachedMountFs.expiresAt = Date.now() + this.maxAge; + return accept(cachedMountFs.childFs); + } else { + const childFs = this.factorySync(this.baseFs, p); + try { + return accept(childFs); + } finally { + childFs.saveAndClose?.(); + } + } + } +} + +class PosixFS extends ProxiedFS { + baseFs; + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return npath.fromPortablePath(path); + } + mapToBase(path) { + return npath.toPortablePath(path); + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + baseFs; + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? url.URL : globalThis.URL; + +class NodePathFS extends ProxiedFS { + baseFs; + constructor(baseFs) { + super(npath); + this.baseFs = baseFs; + } + mapFromBase(path) { + return path; + } + mapToBase(path) { + if (typeof path === `string`) + return path; + if (path instanceof URL) + return url.fileURLToPath(path); + if (Buffer.isBuffer(path)) { + const str = path.toString(); + if (!isUtf8(path, str)) + throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`); + return str; + } + throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`); + } +} +function isUtf8(buf, str) { + if (typeof buffer__default.default.isUtf8 !== `undefined`) + return buffer__default.default.isUtf8(buf); + return Buffer.byteLength(str) === buf.byteLength; +} + +const kBaseFs = Symbol(`kBaseFs`); +const kFd = Symbol(`kFd`); +const kClosePromise = Symbol(`kClosePromise`); +const kCloseResolve = Symbol(`kCloseResolve`); +const kCloseReject = Symbol(`kCloseReject`); +const kRefs = Symbol(`kRefs`); +const kRef = Symbol(`kRef`); +const kUnref = Symbol(`kUnref`); +class FileHandle { + [kBaseFs]; + [kFd]; + [kRefs] = 1; + [kClosePromise] = void 0; + [kCloseResolve] = void 0; + [kCloseReject] = void 0; + constructor(fd, baseFs) { + this[kBaseFs] = baseFs; + this[kFd] = fd; + } + get fd() { + return this[kFd]; + } + async appendFile(data, options) { + try { + this[kRef](this.appendFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0); + } finally { + this[kUnref](); + } + } + async chown(uid, gid) { + try { + this[kRef](this.chown); + return await this[kBaseFs].fchownPromise(this.fd, uid, gid); + } finally { + this[kUnref](); + } + } + async chmod(mode) { + try { + this[kRef](this.chmod); + return await this[kBaseFs].fchmodPromise(this.fd, mode); + } finally { + this[kUnref](); + } + } + createReadStream(options) { + return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd }); + } + createWriteStream(options) { + return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd }); + } + // FIXME: Missing FakeFS version + datasync() { + throw new Error(`Method not implemented.`); + } + // FIXME: Missing FakeFS version + sync() { + throw new Error(`Method not implemented.`); + } + async read(bufferOrOptions, offset, length, position) { + try { + this[kRef](this.read); + let buffer; + if (!Buffer.isBuffer(bufferOrOptions)) { + bufferOrOptions ??= {}; + buffer = bufferOrOptions.buffer ?? Buffer.alloc(16384); + offset = bufferOrOptions.offset || 0; + length = bufferOrOptions.length ?? buffer.byteLength; + position = bufferOrOptions.position ?? null; + } else { + buffer = bufferOrOptions; + } + offset ??= 0; + length ??= 0; + if (length === 0) { + return { + bytesRead: length, + buffer + }; + } + const bytesRead = await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position); + return { + bytesRead, + buffer + }; + } finally { + this[kUnref](); + } + } + async readFile(options) { + try { + this[kRef](this.readFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + return await this[kBaseFs].readFilePromise(this.fd, encoding); + } finally { + this[kUnref](); + } + } + readLines(options) { + return readline.createInterface({ + input: this.createReadStream(options), + crlfDelay: Infinity + }); + } + async stat(opts) { + try { + this[kRef](this.stat); + return await this[kBaseFs].fstatPromise(this.fd, opts); + } finally { + this[kUnref](); + } + } + async truncate(len) { + try { + this[kRef](this.truncate); + return await this[kBaseFs].ftruncatePromise(this.fd, len); + } finally { + this[kUnref](); + } + } + // FIXME: Missing FakeFS version + utimes(atime, mtime) { + throw new Error(`Method not implemented.`); + } + async writeFile(data, options) { + try { + this[kRef](this.writeFile); + const encoding = (typeof options === `string` ? options : options?.encoding) ?? void 0; + await this[kBaseFs].writeFilePromise(this.fd, data, encoding); + } finally { + this[kUnref](); + } + } + async write(...args) { + try { + this[kRef](this.write); + if (ArrayBuffer.isView(args[0])) { + const [buffer, offset, length, position] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset ?? void 0, length ?? void 0, position ?? void 0); + return { bytesWritten, buffer }; + } else { + const [data, position, encoding] = args; + const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding); + return { bytesWritten, buffer: data }; + } + } finally { + this[kUnref](); + } + } + // TODO: Use writev from FakeFS when that is implemented + async writev(buffers, position) { + try { + this[kRef](this.writev); + let bytesWritten = 0; + if (typeof position !== `undefined`) { + for (const buffer of buffers) { + const writeResult = await this.write(buffer, void 0, void 0, position); + bytesWritten += writeResult.bytesWritten; + position += writeResult.bytesWritten; + } + } else { + for (const buffer of buffers) { + const writeResult = await this.write(buffer); + bytesWritten += writeResult.bytesWritten; + } + } + return { + buffers, + bytesWritten + }; + } finally { + this[kUnref](); + } + } + // FIXME: Missing FakeFS version + readv(buffers, position) { + throw new Error(`Method not implemented.`); + } + close() { + if (this[kFd] === -1) return Promise.resolve(); + if (this[kClosePromise]) return this[kClosePromise]; + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => { + this[kClosePromise] = void 0; + }); + } else { + this[kClosePromise] = new Promise((resolve, reject) => { + this[kCloseResolve] = resolve; + this[kCloseReject] = reject; + }).finally(() => { + this[kClosePromise] = void 0; + this[kCloseReject] = void 0; + this[kCloseResolve] = void 0; + }); + } + return this[kClosePromise]; + } + [kRef](caller) { + if (this[kFd] === -1) { + const err = new Error(`file closed`); + err.code = `EBADF`; + err.syscall = caller.name; + throw err; + } + this[kRefs]++; + } + [kUnref]() { + this[kRefs]--; + if (this[kRefs] === 0) { + const fd = this[kFd]; + this[kFd] = -1; + this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]); + } + } +} + +const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessSync`, + `appendFileSync`, + `createReadStream`, + `createWriteStream`, + `chmodSync`, + `fchmodSync`, + `chownSync`, + `fchownSync`, + `closeSync`, + `copyFileSync`, + `linkSync`, + `lstatSync`, + `fstatSync`, + `lutimesSync`, + `mkdirSync`, + `openSync`, + `opendirSync`, + `readlinkSync`, + `readFileSync`, + `readdirSync`, + `readlinkSync`, + `realpathSync`, + `renameSync`, + `rmdirSync`, + `rmSync`, + `statSync`, + `symlinkSync`, + `truncateSync`, + `ftruncateSync`, + `unlinkSync`, + `unwatchFile`, + `utimesSync`, + `watch`, + `watchFile`, + `writeFileSync`, + `writeSync` +]); +const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([ + `accessPromise`, + `appendFilePromise`, + `fchmodPromise`, + `chmodPromise`, + `fchownPromise`, + `chownPromise`, + `closePromise`, + `copyFilePromise`, + `linkPromise`, + `fstatPromise`, + `lstatPromise`, + `lutimesPromise`, + `mkdirPromise`, + `openPromise`, + `opendirPromise`, + `readdirPromise`, + `realpathPromise`, + `readFilePromise`, + `readdirPromise`, + `readlinkPromise`, + `renamePromise`, + `rmdirPromise`, + `rmPromise`, + `statPromise`, + `symlinkPromise`, + `truncatePromise`, + `ftruncatePromise`, + `unlinkPromise`, + `utimesPromise`, + `writeFilePromise`, + `writeSync` +]); +function patchFs(patchedFs, fakeFs) { + fakeFs = new NodePathFS(fakeFs); + const setupFn = (target, name, replacement) => { + const orig = target[name]; + target[name] = replacement; + if (typeof orig?.[nodeUtils.promisify.custom] !== `undefined`) { + replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom]; + } + }; + { + setupFn(patchedFs, `exists`, (p, ...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeFs.existsPromise(p).then((exists) => { + callback(exists); + }, () => { + callback(false); + }); + }); + }); + setupFn(patchedFs, `read`, (...args) => { + let [fd, buffer, offset, length, position, callback] = args; + if (args.length <= 3) { + let options = {}; + if (args.length < 3) { + callback = args[1]; + } else { + options = args[1]; + callback = args[2]; + } + ({ + buffer = Buffer.alloc(16384), + offset = 0, + length = buffer.byteLength, + position + } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) { + process.nextTick(() => { + callback(null, 0, buffer); + }); + return; + } + if (position == null) + position = -1; + process.nextTick(() => { + fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => { + callback(null, bytesRead, buffer); + }, (error) => { + callback(error, 0, buffer); + }); + }); + }); + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + const wrapper = (...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { + }; + process.nextTick(() => { + fakeImpl.apply(fakeFs, args).then((result) => { + callback(null, result); + }, (error) => { + callback(error); + }); + }); + }; + setupFn(patchedFs, origName, wrapper); + } + patchedFs.realpath.native = patchedFs.realpath; + } + { + setupFn(patchedFs, `existsSync`, (p) => { + try { + return fakeFs.existsSync(p); + } catch { + return false; + } + }); + setupFn(patchedFs, `readSync`, (...args) => { + let [fd, buffer, offset, length, position] = args; + if (args.length <= 3) { + const options = args[2] || {}; + ({ offset = 0, length = buffer.byteLength, position } = options); + } + if (offset == null) + offset = 0; + length |= 0; + if (length === 0) + return 0; + if (position == null) + position = -1; + return fakeFs.readSync(fd, buffer, offset, length, position); + }); + for (const fnName of SYNC_IMPLEMENTATIONS) { + const origName = fnName; + if (typeof patchedFs[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + setupFn(patchedFs, origName, fakeImpl.bind(fakeFs)); + } + patchedFs.realpathSync.native = patchedFs.realpathSync; + } + { + const patchedFsPromises = patchedFs.promises; + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const origName = fnName.replace(/Promise$/, ``); + if (typeof patchedFsPromises[origName] === `undefined`) + continue; + const fakeImpl = fakeFs[fnName]; + if (typeof fakeImpl === `undefined`) + continue; + if (fnName === `open`) + continue; + setupFn(patchedFsPromises, origName, (pathLike, ...args) => { + if (pathLike instanceof FileHandle) { + return pathLike[origName].apply(pathLike, args); + } else { + return fakeImpl.call(fakeFs, pathLike, ...args); + } + }); + } + setupFn(patchedFsPromises, `open`, async (...args) => { + const fd = await fakeFs.openPromise(...args); + return new FileHandle(fd, fakeFs); + }); + } + { + patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.readPromise(fd, buffer, ...args); + return { bytesRead: await res, buffer }; + }; + patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => { + const res = fakeFs.writePromise(fd, buffer, ...args); + return { bytesWritten: await res, buffer }; + }; + } +} + +let cachedInstance; +let registeredFactory = () => { + throw new Error(`Assertion failed: No libzip instance is available, and no factory was configured`); +}; +function setFactory(factory) { + registeredFactory = factory; +} +function getInstance() { + if (typeof cachedInstance === `undefined`) + cachedInstance = registeredFactory(); + return cachedInstance; +} + +var libzipSync = {exports: {}}; + +(function (module, exports) { +var frozenFs = Object.assign({}, fs__default.default); +var createModule = function() { + var _scriptDir = void 0; + if (typeof __filename !== "undefined") _scriptDir = _scriptDir || __filename; + return function(createModule2) { + createModule2 = createModule2 || {}; + var Module = typeof createModule2 !== "undefined" ? createModule2 : {}; + var readyPromiseResolve, readyPromiseReject; + Module["ready"] = new Promise(function(resolve, reject) { + readyPromiseResolve = resolve; + readyPromiseReject = reject; + }); + var moduleOverrides = {}; + var key; + for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } + } + var scriptDirectory = ""; + function locateFile(path) { + if (Module["locateFile"]) { + return Module["locateFile"](path, scriptDirectory); + } + return scriptDirectory + path; + } + var read_, readBinary; + var nodeFS; + var nodePath; + { + { + scriptDirectory = __dirname + "/"; + } + read_ = function shell_read(filename, binary) { + var ret = tryParseAsDataURI(filename); + if (ret) { + return binary ? ret : ret.toString(); + } + if (!nodeFS) nodeFS = frozenFs; + if (!nodePath) nodePath = path__default.default; + filename = nodePath["normalize"](filename); + return nodeFS["readFileSync"](filename, binary ? null : "utf8"); + }; + readBinary = function readBinary2(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; + }; + if (process["argv"].length > 1) { + process["argv"][1].replace(/\\/g, "/"); + } + process["argv"].slice(2); + Module["inspect"] = function() { + return "[Emscripten Module object]"; + }; + } + Module["print"] || console.log.bind(console); + var err = Module["printErr"] || console.warn.bind(console); + for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } + } + moduleOverrides = null; + if (Module["arguments"]) ; + if (Module["thisProgram"]) ; + if (Module["quit"]) ; + var wasmBinary; + if (Module["wasmBinary"]) wasmBinary = Module["wasmBinary"]; + Module["noExitRuntime"] || true; + if (typeof WebAssembly !== "object") { + abort("no native wasm support detected"); + } + function getValue(ptr, type, noSafe) { + type = type || "i8"; + if (type.charAt(type.length - 1) === "*") type = "i32"; + switch (type) { + case "i1": + return HEAP8[ptr >> 0]; + case "i8": + return HEAP8[ptr >> 0]; + case "i16": + return LE_HEAP_LOAD_I16((ptr >> 1) * 2); + case "i32": + return LE_HEAP_LOAD_I32((ptr >> 2) * 4); + case "i64": + return LE_HEAP_LOAD_I32((ptr >> 2) * 4); + case "float": + return LE_HEAP_LOAD_F32((ptr >> 2) * 4); + case "double": + return LE_HEAP_LOAD_F64((ptr >> 3) * 8); + default: + abort("invalid type for getValue: " + type); + } + return null; + } + var wasmMemory; + var ABORT = false; + function assert(condition, text) { + if (!condition) { + abort("Assertion failed: " + text); + } + } + function getCFunc(ident) { + var func = Module["_" + ident]; + assert( + func, + "Cannot call unknown function " + ident + ", make sure it is exported" + ); + return func; + } + function ccall(ident, returnType, argTypes, args, opts) { + var toC = { + string: function(str) { + var ret2 = 0; + if (str !== null && str !== void 0 && str !== 0) { + var len = (str.length << 2) + 1; + ret2 = stackAlloc(len); + stringToUTF8(str, ret2, len); + } + return ret2; + }, + array: function(arr) { + var ret2 = stackAlloc(arr.length); + writeArrayToMemory(arr, ret2); + return ret2; + } + }; + function convertReturnValue(ret2) { + if (returnType === "string") return UTF8ToString(ret2); + if (returnType === "boolean") return Boolean(ret2); + return ret2; + } + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + ret = convertReturnValue(ret); + if (stack !== 0) stackRestore(stack); + return ret; + } + function cwrap(ident, returnType, argTypes, opts) { + argTypes = argTypes || []; + var numericArgs = argTypes.every(function(type) { + return type === "number"; + }); + var numericRet = returnType !== "string"; + if (numericRet && numericArgs && !opts) { + return getCFunc(ident); + } + return function() { + return ccall(ident, returnType, argTypes, arguments); + }; + } + var UTF8Decoder = new TextDecoder("utf8"); + function UTF8ToString(ptr, maxBytesToRead) { + if (!ptr) return ""; + var maxPtr = ptr + maxBytesToRead; + for (var end = ptr; !(end >= maxPtr) && HEAPU8[end]; ) ++end; + return UTF8Decoder.decode(HEAPU8.subarray(ptr, end)); + } + function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) return 0; + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) { + var u1 = str.charCodeAt(++i); + u = 65536 + ((u & 1023) << 10) | u1 & 1023; + } + if (u <= 127) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 2047) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 192 | u >> 6; + heap[outIdx++] = 128 | u & 63; + } else if (u <= 65535) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 224 | u >> 12; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } else { + if (outIdx + 3 >= endIdx) break; + heap[outIdx++] = 240 | u >> 18; + heap[outIdx++] = 128 | u >> 12 & 63; + heap[outIdx++] = 128 | u >> 6 & 63; + heap[outIdx++] = 128 | u & 63; + } + } + heap[outIdx] = 0; + return outIdx - startIdx; + } + function stringToUTF8(str, outPtr, maxBytesToWrite) { + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + } + function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + var u = str.charCodeAt(i); + if (u >= 55296 && u <= 57343) + u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; + if (u <= 127) ++len; + else if (u <= 2047) len += 2; + else if (u <= 65535) len += 3; + else len += 4; + } + return len; + } + function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; + } + function writeArrayToMemory(array, buffer2) { + HEAP8.set(array, buffer2); + } + function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - x % multiple; + } + return x; + } + var buffer, HEAP8, HEAPU8; + var HEAP_DATA_VIEW; + function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module["HEAP_DATA_VIEW"] = HEAP_DATA_VIEW = new DataView(buf); + Module["HEAP8"] = HEAP8 = new Int8Array(buf); + Module["HEAP16"] = new Int16Array(buf); + Module["HEAP32"] = new Int32Array(buf); + Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); + Module["HEAPU16"] = new Uint16Array(buf); + Module["HEAPU32"] = new Uint32Array(buf); + Module["HEAPF32"] = new Float32Array(buf); + Module["HEAPF64"] = new Float64Array(buf); + } + Module["INITIAL_MEMORY"] || 16777216; + var wasmTable; + var __ATPRERUN__ = []; + var __ATINIT__ = []; + var __ATPOSTRUN__ = []; + function preRun() { + if (Module["preRun"]) { + if (typeof Module["preRun"] == "function") + Module["preRun"] = [Module["preRun"]]; + while (Module["preRun"].length) { + addOnPreRun(Module["preRun"].shift()); + } + } + callRuntimeCallbacks(__ATPRERUN__); + } + function initRuntime() { + callRuntimeCallbacks(__ATINIT__); + } + function postRun() { + if (Module["postRun"]) { + if (typeof Module["postRun"] == "function") + Module["postRun"] = [Module["postRun"]]; + while (Module["postRun"].length) { + addOnPostRun(Module["postRun"].shift()); + } + } + callRuntimeCallbacks(__ATPOSTRUN__); + } + function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); + } + function addOnInit(cb) { + __ATINIT__.unshift(cb); + } + function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); + } + var runDependencies = 0; + var dependenciesFulfilled = null; + function addRunDependency(id) { + runDependencies++; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + } + function removeRunDependency(id) { + runDependencies--; + if (Module["monitorRunDependencies"]) { + Module["monitorRunDependencies"](runDependencies); + } + if (runDependencies == 0) { + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); + } + } + } + Module["preloadedImages"] = {}; + Module["preloadedAudios"] = {}; + function abort(what) { + if (Module["onAbort"]) { + Module["onAbort"](what); + } + what += ""; + err(what); + ABORT = true; + what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; + var e = new WebAssembly.RuntimeError(what); + readyPromiseReject(e); + throw e; + } + var dataURIPrefix = "data:application/octet-stream;base64,"; + function isDataURI(filename) { + return filename.startsWith(dataURIPrefix); + } + var wasmBinaryFile = "data:application/octet-stream;base64,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QCAAKAJIIgEgASADaiADEAcaAkAgAyAAKAJsIgFNBEAgACABIANrNgJsDAELIABCADcCbAsgACAAKAJoIANrIgE2AmggACAAKAJYIANrNgJYIAEgACgChC5JBEAgACABNgKELgsgAEH8gAEoAgARAwAgAiADaiECCwJAIAAoAgAiASgCBCIERQ0AIAAoAjwhBSAAIAIgBCACIARJGyICBH8gACgCSCAAKAJoaiAFaiEFIAEgBCACazYCBAJAAkACQAJAIAEoAhwiBCgCFEEBaw4CAQACCyAEQaABaiAFIAEoAgAgAkHcgAEoAgARCAAMAgsgASABKAIwIAUgASgCACACQcSAASgCABEEADYCMAwBCyAFIAEoAgAgAhAHGgsgASABKAIAIAJqNgIAIAEgASgCCCACajYCCCAAKAI8BSAFCyACaiICNgI8AkAgACgChC4iASACakEDSQ0AIAAoAmggAWshAQJAIAAoAnRBgQhPBEAgACAAIAAoAkggAWoiAi0AACACLQABIAAoAnwRAAA2AlQMAQsgAUUNACAAIAFBAWsgACgChAERAgAaCyAAKAKELiAAKAI8IgJBAUZrIgRFDQAgACABIAQgACgCgAERBQAgACAAKAKELiAEazYChC4gACgCPCECCyACQYUCSw0AIAAoAgAoAgRFDQAgACgCMCEBDAELCwJAIAAoAkQiAiAAKAJAIgNNDQAgAAJ/IAAoAjwgACgCaGoiASADSwRAIAAoAkggAWpBACACIAFrIgNBggIgA0GCAkkbIgMQGSABIANqDAELIAFBggJqIgEgA00NASAAKAJIIANqQQAgAiADayICIAEgA2siAyACIANJGyIDEBkgACgCQCADags2AkALC50CAQF/AkAgAAJ/IAAoAqAuIgFBwABGBEAgACgCBCAAKAIQaiAAKQOYLjcAACAAQgA3A5guIAAgACgCEEEIajYCEEEADAELIAFBIE4EQCAAKAIEIAAoAhBqIAApA5guPgAAIAAgAEGcLmo1AgA3A5guIAAgACgCEEEEajYCECAAIAAoAqAuQSBrIgE2AqAuCyABQRBOBEAgACgCBCAAKAIQaiAAKQOYLj0AACAAIAAoAhBBAmo2AhAgACAAKQOYLkIQiDcDmC4gACAAKAKgLkEQayIBNgKgLgsgAUEISA0BIAAgACgCECIBQQFqNgIQ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KAJUIgEEfyABQQAgARAiEBkgACgCVAVBAAsQBiAAQQA2AlQLC9wMAgl/AX4jAEFAaiIGJAACQAJAAkACQAJAIAEoAjBBABAjIgVBAkZBACABKAI4QQAQIyIEQQFGGw0AIAVBAUZBACAEQQJGGw0AIAVBAkciAw0BIARBAkcNAQsgASABLwEMQYAQcjsBDEEAIQMMAQsgASABLwEMQf/vA3E7AQxBACEFIANFBEBB9eABIAEoAjAgAEEIahBpIgVFDQILIAJBgAJxBEAgBSEDDAELIARBAkcEQCAFIQMMAQtB9cYBIAEoAjggAEEIahBpIgNFBEAgBRAcDAILIAMgBTYCAAsgASABLwEMQf7/A3EgAS8BUiIFQQBHcjsBDAJAAkACQAJAAn8CQAJAIAEpAyhC/v///w9WDQAgASkDIEL+////D1YNACACQYAEcUUNASABKQNIQv////8PVA0BCyAFQYECa0H//wNxQQNJIQdBAQwBCyAFQYECa0H//wNxIQQgAkGACnFBgApHDQEgBEEDSSEHQQALIQkgBkIcEBciBEUEQCAAQQhqIgAEQCAAQQA2AgQgAEEONgIACyADEBwMBQsgAkGACHEhBQJAAkAgAkGAAnEEQAJAIAUNACABKQMgQv////8PVg0AIAEpAyhCgICAgBBUDQMLIAQgASkDKBAYIAEpAyAhDAwBCwJAAkACQCAFDQAgASkDIEL/////D1YNACABKQMoIgxC/////w9WDQEgASkDSEKAgICAEFQNBAsgASkDKCIMQv////8PVA0BCyAEIAwQGAsgASkDICIMQv////8PWgRAIAQgDBAYCyABKQNIIgxC/////w9UDQELIAQgDBAYCyAELQAARQRAIABBCGoiAARAIABBADYCBCAAQRQ2AgALIAQQCCADEBwMBQtBASEKQQEgBC0AAAR+IAQpAxAFQgALp0H//wNxIAYQRyEFIAQQCCAFIAM2AgAgBw0BDAILIAMhBSAEQQJLDQELIAZCBxAXIgRFBEAgAEEIaiIABEAgAEEANgIEIABBDjYCAAsgBRAcDAMLIARBAhANIARBhxJBAhAsIAQgAS0AUhBwIAQgAS8BEBANIAQtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAsgBBAIDAILQYGyAkEHIAYQRyEDIAQQCCADIAU2AgBBASEL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NgIEIABB7A42AhggGiEdDAMLIARB/wFxIgJBwABxRQRAIAggDSADLwECQQJ0aiAdp0F/IAJ0QX9zcUECdGoiAy0AASICayEIIB0gAq2IIR0gAy0AACIERQ0HDAELCyAEQSBxBEAgB0G//gA2AgQgASECDAgLIAdB0f4ANgIEIABB0A42AhggASECDAcLIB1BfyAGdEF/c62DIBt8IhunIQUgCCAEQQ9xIgNrIQggGiAErUIPg4ghHSABIBdrIgYgAjMBAiAaQX8gA3RBf3Otg3ynIgRPDQIgBCAGayIGIBlNDQEgBygCjEdFDQEgB0HR/gA2AgQgAEG5DDYCGAsgASECIAshBQwFCwJAIA5FBEAgDCARIAZraiEDDAELIAYgDk0EQCAMIA4gBmtqIQMMAQsgDCARIAYgDmsiBmtqIQMgBSAGTQ0AIAUgBmshBQJAAkAgASADTSABIA8gAWusIhogBq0iGyAaIBtUGyIapyIGaiICIANLcQ0AIAMgBmogAUsgASADT3ENACABIAMgBhAHGiACIQEMAQsgASADIAMgAWsiASABQR91IgFqIAFzIgIQByACaiEBIBogAq0iHn0iHFANACACIANqIQIDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgASACKQAANwAAIAEgAikAGDcAGCABIAIpABA3ABAgASACKQAINwAIIBpCIH0hGiACQSBqIQIgAUEgaiEBIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAEgAikAADcAACABIAIpABg3ABggASACKQAQNwAQIAEgAikACDcACCABIAIpADg3ADggASACKQAwNwAwIAEgAikAKDcAKCABIAIpACA3ACAgASACKQBYNwBYIAEgAikAUDcAUCABIAIpAEg3AEggASACKQBANwBAIAEgAikAYDcAYCABIAIpAGg3AGggASACKQBwNwBwIAEgAikAeDcAeCACQYABaiECIAFBgAFqIQEgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAEgAikAADcAACABIAIpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCABIAIpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCABIAIoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCABIAIvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCABIAItAAA6AAAgAkEBaiECIAFBAWohAQsgHEIAUg0ACwsgDiEGIAwhAwsgBSAGSwRAAkACQCABIANNIAEgDyABa6wiGiAGrSIbIBogG1QbIhqnIglqIgIgA0txDQAgAyAJaiABSyABIANPcQ0AIAEgAyAJEAcaDAELIAEgAyADIAFrIgEgAUEfdSIBaiABcyIBEAcgAWohAiAaIAGtIh59IhxQDQAgASADaiEBA0ACQCAcIB4gHCAeVBsiG0IgVARAIBshGgwBCyAbIhpCIH0iIEIFiEIBfEIDgyIfUEUEQANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCAaQiB9IRogAUEgaiEBIAJBIGohAiAfQgF9Ih9CAFINAAsLICBC4ABUDQADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggAiABKQA4NwA4IAIgASkAMDcAMCACIAEpACg3ACggAiABKQAgNwAgIAIgASkAWDcAWCACIAEpAFA3AFAgAiABKQBINwBIIAIgASkAQDcAQCACIAEpAGA3AGAgAiABKQBoNwBoIAIgASkAcDcAcCACIAEpAHg3AHggAUGAAWohASACQYABaiECIBpCgAF9IhpCH1YNAAsLIBpCEFoEQCACIAEpAAA3AAAgAiABKQAINwAIIBpCEH0hGiACQRBqIQIgAUEQaiEBCyAaQghaBEAgAiABKQAANwAAIBpCCH0hGiACQQhqIQIgAUEIaiEBCyAaQgRaBEAgAiABKAAANgAAIBpCBH0hGiACQQRqIQIgAUEEaiEBCyAaQgJaBEAgAiABLwAAOwAAIBpCAn0hGiACQQJqIQIgAUECaiEBCyAcIBt9IRwgGlBFBEAgAiABLQAAOgAAIAJBAWohAiABQQFqIQELIBxCAFINAAsLIAUgBmshAUEAIARrIQUCQCAEQQdLBEAgBCEDDAELIAEgBE0EQCAEIQMMAQsgAiAEayEFA0ACQCACIAUpAAA3AAAgBEEBdCEDIAEgBGshASACIARqIQIgBEEDSw0AIAMhBCABIANLDQELC0EAIANrIQULIAIgBWohBAJAIAUgDyACa6wiGiABrSIbIBogG1QbIhqnIgFIIAVBf0pxDQAgBUEBSCABIARqIAJLcQ0AIAIgBCABEAcgAWohAgwDCyACIAQgAyADQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANAiABIARqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAILAkAgASADTSABIA8gAWusIhogBa0iGyAaIBtUGyIapyIEaiICIANLcQ0AIAMgBGogAUsgASADT3ENACABIAMgBBAHGgwCCyABIAMgAyABayIBIAFBH3UiAWogAXMiARAHIAFqIQIgGiABrSIefSIcUA0BIAEgA2ohAQNAAkAgHCAeIBwgHlQbIhtCIFQEQCAbIRoMAQsgGyIaQiB9IiBCBYhCAXxCA4MiH1BFBEADQCACIAEpAAA3AAAgAiABKQAYNwAYIAIgASkAEDcAECACIAEpAAg3AAggGkIgfSEaIAFBIGohASACQSBqIQIgH0IBfSIfQgBSDQALCyAgQuAAVA0AA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIAIgASkAODcAOCACIAEpADA3ADAgAiABKQAoNwAoIAIgASkAIDcAICACIAEpAFg3AFggAiABKQBQNwBQIAIgASkASDcASCACIAEpAEA3AEAgAiABKQBgNwBgIAIgASkAaDcAaCACIAEpAHA3AHAgAiABKQB4NwB4IAFBgAFqIQEgAkGAAWohAiAaQoABfSIaQh9WDQALCyAaQhBaBEAgAiABKQAANwAAIAIgASkACDcACCAaQhB9IRogAkEQaiECIAFBEGohAQsgGkIIWgRAIAIgASkAADcAACAaQgh9IRogAkEIaiECIAFBCGohAQsgGkIEWgRAIAIgASgAADYAACAaQgR9IRogAkEEaiECIAFBBGohAQsgGkICWgRAIAIgAS8AADsAACAaQgJ9IRogAkECaiECIAFBAmohAQsgHCAbfSEcIBpQRQRAIAIgAS0AADoAACACQQFqIQIgAUEBaiEBCyAcUEUNAAsMAQsCQAJAIBYEQAJAIAQgBUkEQCAHKAKYRyAESw0BCyABIARrIQMCQEEAIARrIgVBf0ogDyABa6wiGiAbIBogG1QbIhqnIgIgBUpxDQAgBUEBSCACIANqIAFLcQ0AIAEgAyACEAcgAmohAgwFCyABIAMgBCAEQR91IgFqIAFzIgEQByABaiECIBogAa0iHn0iHFANBCABIANqIQEDQAJAIBwgHiAcIB5UGyIbQiBUBEAgGyEaDAELIBsiGkIgfSIgQgWIQgF8QgODIh9QRQRAA0AgAiABKQAANwAAIAIgASkAGDcAGCACIAEpABA3ABAgAiABKQAINwAIIBpCIH0hGiABQSBqIQEgAkEgaiECIB9CAX0iH0IAUg0ACwsgIELgAFQNAANAIAIgASkAADcAACACIAEpABg3ABggAiABKQAQNwAQIAIgASkACDcACCACIAEpADg3ADggAiABKQAwNwAwIAIgASkAKDcAKCACIAEpACA3ACAgAiABKQBYNwBYIAIgASkAUDcAUCACIAEpAEg3AEggAiABKQBANwBAIAIgASkAYDcAYCACIAEpAGg3AGggAiABKQBwNwBwIAIgASkAeDcAeCABQYABaiEBIAJBgAFqIQIgGkKAAX0iGkIfVg0ACwsgGkIQWgRAIAIgASkAADcAACACIAEpAAg3AAggGkIQfSEaIAJBEGohAiABQRBqIQELIBpCCFoEQCACIAEpAAA3AAAgGkIIfSEaIAJBCGohAiABQQhqIQELIBpCBFoEQCACIAEoAAA2AAAgGkIEfSEaIAJBBGohAiABQQRqIQELIBpCAloEQCACIAEvAAA7AAAgGkICfSEaIAJBAmohAiABQQJqIQELIBwgG30hHCAaUEUEQCACIAEtAAA6AAAgAkEBaiECIAFBAWohAQsgHFBFDQALDAQLIBAgAWsiCUEBaiIGIAUgBSAGSxshAyABIARrIQIgAUEHcUUNAiADRQ0CIAEgAi0AADoAACACQQFqIQIgAUEBaiIGQQdxQQAgA0EBayIFGw0BIAYhASAFIQMgCSEGDAILAkAgBCAFSQRAIAcoAphHIARLDQELIAEgASAEayIGKQAANwAAIAEgBUEBa0EHcUEBaiIDaiECIAUgA2siBEUNAyADIAZqIQEDQCACIAEpAAA3AAAgAUEIaiEBIAJBCGohAiAEQQhrIgQNAAsMAwsgASAEIAUQPyECDAILIAEgAi0AADoAASAJQQFrIQYgA0ECayEFIAJBAWohAgJAIAFBAmoiCkEHcUUNACAFRQ0AIAEgAi0AADoAAiAJQQJrIQYgA0EDayEFIAJBAWohAgJAIAFBA2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAAyAJQQNrIQYgA0EEayEFIAJBAWohAgJAIAFBBGoiCkEHcUUNACAFRQ0AIAEgAi0AADoABCAJQQRrIQYgA0EFayEFIAJBAWohAgJAIAFBBWoiCkEHcUUNACAFRQ0AIAEgAi0AADoABSAJQQVrIQYgA0EGayEFIAJBAWohAgJAIAFBBmoiCkEHcUUNACAFRQ0AIAEgAi0AADoABiAJQQZrIQYgA0EHayEFIAJBAWohAgJAIAFBB2oiCkEHcUUNACAFRQ0AIAEgAi0AADoAByAJQQdrIQYgA0EIayEDIAFBCGohASACQQFqIQIMBgsgCiEBIAUhAwwFCyAKIQEgBSEDDAQLIAohASAFIQMMAwsgCiEBIAUhAwwCCyAKIQEgBSEDDAELIAohASAFIQMLAkACQCAGQRdNBEAgA0UNASADQQFrIQUgA0EHcSIEBEADQCABIAItAAA6AAAgA0EBayEDIAFBAWohASACQQFqIQIgBEEBayIEDQALCyAFQQdJDQEDQCABIAItAAA6AAAgASACLQABOgABIAEgAi0AAjoAAiABIAItAAM6AAMgASACLQAEOgAEIAEgAi0ABToABSABIAItAAY6AAYgASACLQAHOgAHIAFBCGohASACQQhqIQIgA0EIayIDDQALDAELIAMNAQsgASECDAELIAEgBCADED8hAgsgCyEFDAELIAEgAy0AAjoAACABQQFqIQILIAUgFE8NACACIBNJDQELCyAAIAI2AgwgACAFIAhBA3ZrIgE2AgAgACATIAJrQYMCajYCECAAIBQgAWtBDmo2AgQgByAIQQdxIgA2AogBIAcgHUJ/IACthkJ/hYM+AoQBC+cFAQR/IAMgAiACIANLGyEEIAAgAWshAgJAIABBB3FFDQAgBEUNACAAIAItAAA6AAAgA0EBayEGIAJBAWohAiAAQQFqIgdBB3FBACAEQQFrIgUbRQRAIAchACAFIQQgBiEDDAELIAAgAi0AADoAASADQQJrIQYgBEECayEFIAJBAWohAgJAIABBAmoiB0EHcUUNACAFRQ0AIAAgAi0AADoAAiADQQNrIQYgBEEDayEFIAJBAWohAgJAIABBA2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAAyADQQRrIQYgBEEEayEFIAJBAWohAgJAIABBBGoiB0EHcUUNACAFRQ0AIAAgAi0AADoABCADQQVrIQYgBEEFayEFIAJBAWohAgJAIABBBWoiB0EHcUUNACAFRQ0AIAAgAi0AADoABSADQQZrIQYgBEEGayEFIAJBAWohAgJAIABBBmoiB0EHcUUNACAFRQ0AIAAgAi0AADoABiADQQdrIQYgBEEHayEFIAJBAWohAgJAIABBB2oiB0EHcUUNACAFRQ0AIAAgAi0AADoAByADQQhrIQMgBEEIayEEIABBCGohACACQQFqIQIMBgsgByEAIAUhBCAGIQMMBQsgByEAIAUhBCAGIQMMBAsgByEAIAUhBCAGIQMMAwsgByEAIAUhBCAGIQMMAgsgByEAIAUhBCAGIQMMAQsgByEAIAUhBCAGIQMLAkAgA0EXTQRAIARFDQEgBEEBayEBIARBB3EiAwRAA0AgACACLQAAOgAAIARBAWshBCAAQQFqIQAgAkEBaiECIANBAWsi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CyAAIAMtAAAEfiADKQMQBUIAC6dB//8DcSADKAIEEEcLIQUgAxAICyAEQRBqJAAgBQvgAQICfwF+QTAQCSICRQRAIAEEQCABQQA2AgQgAUEONgIAC0EADwsgAkIANwMIIAJBADYCACACQgA3AxAgAkIANwMYIAJCADcDICACQgA3ACUgAFAEQCACDwsCQCAAQv////8AVg0AIACnQQR0EAkiA0UNACACIAM2AgBBACEBQgEhBANAIAMgAUEEdGoiAUIANwIAIAFCADcABSAAIARSBEAgBKchASAEQgF8IQQMAQsLIAIgADcDCCACIAA3AxAgAg8LIAEEQCABQQA2AgQgAUEONgIAC0EAEBAgAhAGQQAL7gECA38BfiMAQRBrIgQkAAJAIARBDGpCBBAXIgNFBEBBfyECDAELAkAgAQRAIAJBgAZxIQUDQAJAIAUgASgCBHFFDQACQCADKQMIQgBUBEAgA0EAOgAADAELIANCADcDECADQQE6AAALIAMgAS8BCBANIAMgAS8BChANIAMtAABFBEAgAEEIaiIABEAgAEEANgIEIABBFDYCAAtBfyECDAQLQX8hAiAAIARBDGpCBBAbQQBIDQMgATMBCiIGUA0AIAAgASgCDCAGEBtBAEgNAwsgASgCACIBDQALC0EAIQILIAMQCAsgBEEQaiQAIAILPAEBfyAABEAgAUGABnEhAQNAIAEgACgCBHEEQCACIAAvAQpqQQRqIQILIAAoAgAiAA0ACwsgAkH//wNxC5wBAQN/IABFBEBBAA8LIAAhAwNAAn8CQAJAIAAvAQgiAUH04AFNBEAgAUEBRg0BIAFB9cYBRg0BDAILIAFBgbICRg0AIAFB9eABRw0BCyAAKAIAIQEgAEEANgIAIAAoAgwQBiAAEAYgASADIAAgA0YbIQMCQCACRQRAQQAhAgwBCyACIAE2AgALIAEMAQsgACICKAIACyIADQALIAMLsgQCBX8BfgJAAkACQCAAIAGtEBciAQRAIAEtAAANAUEAIQAMAgsgBARAIARBADYCBCAEQQ42AgALQQAPC0EAIQADQCABLQAABH4gASkDCCABKQMQfQVCAAtCBFQNASABEAwhByABIAEQDCIGrRATIghFBEBBACECIAQEQCAEQQA2AgQgBEEVNgIACyABEAggAEUNAwNAIAAoAgAhASAAKAIMEAYg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DCAAQRg2AggLDAMLIAAgBiAFLwFqQQAgBCABEQYAIQEgBhALIAFFDQILAkAgDUUEQCABIQMMAQsgACABIAUvAWgQgQEhAyABEAsgA0UNAQsCQCAJRSAMckUEQCADIQEMAQsgACADQQEQgAEhASADEAsgAUUNAQsgASEDDAELQQAhAwsgBUHwAGokACADC4UBAQF/IAFFBEAgAEEIaiIABEAgAEEANgIEIABBEjYCAAtBAA8LQTgQCSIDRQRAIABBCGoiAARAIABBADYCBCAAQQ42AgALQQAPCyADQQA2AhAgA0IANwIIIANCADcDKCADQQA2AgQgAyACNgIAIANCADcDGCADQQA2AjAgACABQTsgAxBCCw8AIAAgASACQQBBABCCAQusAgECfyABRQRAIABBCGoiAARAIABBADYCBCAAQRI2AgALQQAPCwJAIAJBfUsNACACQf//A3FBCEYNACAAQQhqIgAEQCAAQQA2AgQgAEEQNgIAC0EADwsCQEGwwAAQCSIFBEAgBUEANgIIIAVCADcCACAFQYiBAUGogQEgAxs2AqhAIAUgAjYCFCAFIAM6ABAgBUEAOgAPIAVBADsBDCAFIAMgAkF9SyIGcToADiAFQQggAiAGG0H//wNxIAQgBUGIgQFBqIEBIAMbKAIAEQAAIgI2AqxAIAINASAFEDEgBRAGCyAAQQhqIgAEQCAAQQA2AgQgAEEONgIAC0EADwsgACABQTogBRBCIgAEfyAABSAFKAKsQCAFKAKoQCgCBBEDACAFEDEgBRAGQQALC6ABAQF/IAIgACgCBCIDIAIgA0kbIgIEQCAAIAMgAms2AgQCQAJAAkACQCAAKAIcIgMoAhRBAWsOAgEAAgsgA0GgAWogASAAKAIAIAJB3IABKAIAEQgADAILIAAgACgCMCABIAAoAgAgAkHEgAEoAgARBAA2AjAMAQsgASAAKAIAIAIQBxoLIAAgACgCACACajYCACAAIAAoAgggAmo2AggLC7cCAQR/QX4hAgJAIABFDQAgACgCIEUNACAAKAIkIgRFDQAgACgCHCIBRQ0AIAEoAgAgAEcNAAJAAkAgASgCICIDQTlrDjkBAgICAgICAgICAgIBAgICAQICAgICAgICAgICAgICAgICAQICAgICAgICAgICAQICAgICAgICAgEACyADQZoFRg0AIANBKkcN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DCABajYCDCAGIAYoAgggAWo2AgggBSAFKAIUIAFqNgIUIAUgBSgCECABazYCECAGIAYoAhAgAWsiATYCECABDQAgBiAGKAIENgIIC0EAIQRBACEJIAMoAhBFDQAMCgsgAygCHCgCJCEGIAMgAygCGCIBQQFqNgIYIAEgBmotAAAhASADIARBAWo2AhAgAygCBCAEaiABOgAAIAEEQCADKAIQIQQMAQsLIAMoAhwoAixFDQAgAygCECIGIAlNDQAgBQJ/IAUoAjAhBEEAIAMoAgQgCWoiAUUNABogBCABIAYgCWtB1IABKAIAEQAACzYCMAsgA0HnADYCIAsCQCADKAIcKAIsBEAgAygCDCADKAIQIgFBAmpJBH8gBRAKIAMoAhANAkEABSABCyADKAIEaiAFKAIwOwAAIAMgAygCEEECajYCECADQaABakHkgAEoAgARAQAaCyADQfEANgIgIAUQCiADKAIQRQ0BDAcLDAYLIAUoAgQNAQsgAygCPA0AIApFDQEgAygCIEGaBUYNAQsCfyADKAKIASIBRQRAIAMgChCFAQwBCwJAAkACQCADKAKMAUECaw4CAAECCwJ/AkADQAJAAkAgAygCPA0AIAMQLyADKAI8DQAgCg0BQQAMBAsgAygCSCADKAJoai0AACEEIAMgAygC8C0iAUEBajYC8C0gASADKALsLWpBADoAACADIAMoAvAtIgFBAWo2AvAtIAEgAygC7C1qQQA6AAAgAyADKALwLSIBQQFqNgLwLSABIAMoAuwtaiAEOgAAIAMgBEECdGoiASABLwHkAUEBajsB5AEgAyADKAI8QQFrNgI8IAMgAygCaEEBaiIBNgJoIAMoAvAtIAMoAvQtRw0BQQAhBCADIAMoAlgiBkEATgR/IAMoAkggBmoFQQALIAEgBmtBABAPIAMgAygCaDYCWCADKAIAEAogAygCACgCEA0BDAILCyADQQA2AoQuIApBBEYEQCADIAMoAlgiAUEATgR/IAMoAkggAWoFQQALIAMoAmggAWtBARAPIAMgAygCaDYCWCADKAIAEApBA0ECIAMoAgAoAhAbDAILIAMoAvAtBEBBACEEIAMgAygCWCIBQQBOBH8gAygCSCABagVBAAsgAygCaCABa0EAEA8gAyADKAJoNgJYIAMoAgAQCiADKAIAKAIQRQ0BC0EBIQQLIAQL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bGl0ZXJhbC9sZW5ndGhzIHNldABpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQAdW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0AGludmFsaWQgZGlzdGFuY2VzIHNldABpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0AEZpbGUgYWxyZWFkeSBleGlzdHMAdG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMAaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocwAlcyVzJXMAYnVmZmVyIGVycm9yAE5vIGVycm9yAHN0cmVhbSBlcnJvcgBUZWxsIGVycm9yAEludGVybmFsIGVycm9yAFNlZWsgZXJyb3IAV3JpdGUgZXJyb3IAZmlsZSBlcnJvcgBSZWFkIGVycm9yAFpsaWIgZXJyb3IAZGF0YSBlcnJvcgBDUkMgZXJyb3IAaW5jb21wYXRpYmxlIHZlcnNpb24AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoADEuMi4xMy56bGliLW5nAGludmFsaWQgd2luZG93IHNpemUAUmVhZC1vbmx5IGFyY2hpdmUATm90IGEgemlwIGFyY2hpdmUAUmVzb3VyY2Ugc3RpbGwgaW4gdXNlAE1hbGxvYyBmYWlsdXJlAGludmFsaWQgYmxvY2sgdHlwZQBGYWlsdXJlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZQBDYW4ndCBvcGVuIGZpbGUATm8gc3VjaCBmaWxlAFByZW1hdHVyZSBlbmQgb2YgZmlsZQBDYW4ndCByZW1vdmUgZmlsZQBpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUAaW52YWxpZCBkaXN0YW5jZSBjb2RlAHVua25vd24gY29tcHJlc3Npb24gbWV0aG9kAHN0cmVhbSBlbmQAQ29tcHJlc3NlZCBkYXRhIGludmFsaWQATXVsdGktZGlzayB6aXAgYXJjaGl2ZXMgbm90IHN1cHBvcnRl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UgAIANIACAAyAAgAsgAIAHIACADyAAgACgAIAIoACABKAAgAygAIACoACACqAAgAagAIAOoACAAaAAgAmgAIAFoACADaAAgAOgAIALoACAB6AAgA+gAIAAYACACGAAgARgAIAMYACAAmAAgApgAIAGYACADmAAgAFgAIAJYACABWAAgA1gAIADYACAC2AAgAdgAIAPYACAAOAAgAjgAIAE4ACADOAAgALgAIAK4ACABuAAgA7gAIAB4ACACeAAgAXgAIAN4ACAA+AAgAvgAIAH4ACAD+AAgAAQAIAIEACABBAAgAwQAIACEACAChAAgAYQAIAOEACAARAAgAkQAIAFEACADRAAgAMQAIALEACABxAAgA8QAIAAkACACJAAgASQAIAMkACAApAAgAqQAIAGkACADpAAgAGQAIAJkACABZAAgA2QAIADkACAC5AAgAeQAIAPkACAAFAAgAhQAIAEUACADFAAgAJQAIAKUACABlAAgA5QAIABUACACVAAgAVQAIANUACAA1AAgAtQAIAHUACAD1AAgADQAIAI0ACABNAAgAzQAIAC0ACACtAAgAbQAIAO0ACAAdAAgAnQAIAF0ACADdAAgAPQAIAL0ACAB9AAgA/QAIABMACQATAQkAkwAJAJMBCQBTAAkAUwEJANMACQDTAQkAMwAJADMBCQCzAAkAswEJAHMACQBzAQkA8wAJAPMBCQALAAkACwEJAIsACQCLAQkASwAJAEsBCQDLAAkAywEJACsACQArAQkAqwAJAKsBCQBrAAkAawEJAOsACQDrAQkAGwAJABsBCQCbAAkAmwEJAFsACQBbAQkA2wAJANsBCQA7AAkAOwEJALsACQC7AQkAewAJAHsBCQD7AAkA+wEJAAcACQAHAQkAhwAJAIcBCQBHAAkARwEJAMcACQDHAQkAJwAJACcBCQCnAAkApwEJAGcACQBnAQkA5wAJAOcBCQAXAAkAFwEJAJcACQCXAQkAVwAJAFcBCQDXAAkA1wEJADcACQA3AQkAtwAJALcBCQB3AAkAdwEJAPcACQD3AQkADwAJAA8BCQCPAAkAjwEJAE8ACQBPAQkAzwAJAM8BCQAvAAkALwEJAK8ACQCvAQkAbwAJAG8BCQDvAAkA7wEJAB8ACQAfAQkAnwAJAJ8BCQBfAAkAXwEJAN8ACQDfAQkAPwAJAD8BCQC/AAkA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SXMgYSBkaXJlY3RvcnkAVGV4dCBmaWxlIGJ1c3kARXhlYyBmb3JtYXQgZXJyb3IASW52YWxpZCBhcmd1bWVudABBcmd1bWVudCBsaXN0IHRvbyBsb25nAFN5bWJvbGljIGxpbmsgbG9vcABGaWxlbmFtZSB0b28gbG9uZwBUb28gbWFueSBvcGVuIGZpbGVzIGluIHN5c3RlbQBObyBmaWxlIGRlc2NyaXB0b3JzIGF2YWlsYWJsZQBCYWQgZmlsZSBkZXNjcmlwdG9yAE5vIGNoaWxkIHByb2Nlc3MAQmFkIGFkZHJlc3MARmlsZSB0b28gbGFyZ2UAVG9vIG1hbnkgbGlua3MATm8gbG9ja3MgYXZhaWxhYmxlAFJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyAFN0YXRlIG5vdCByZWNvdmVyYWJsZQBQcmV2aW91cyBvd25lciBkaWVkAE9wZXJhdGlvbiBjYW5jZWxlZABGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQATm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUASWRlbnRpZmllciByZW1vdmVkAERldmljZSBub3QgYSBzdHJlYW0ATm8gZGF0YSBhdmFpbGFibGUARGV2aWNlIHRpbWVvdXQAT3V0IG9mIHN0cmVhbXMgcmVzb3VyY2VzAExpbmsgaGFzIGJlZW4gc2V2ZXJlZABQcm90b2NvbCBlcnJvcgBCYWQgbWVzc2FnZQBGaWxlIGRlc2NyaXB0b3IgaW4gYmFkIHN0YXRlAE5vdCBhIHNvY2tldABEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkAE1lc3NhZ2UgdG9vIGxhcmdlAFByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldABQcm90b2NvbCBub3QgYXZhaWxhYmxlAFByb3RvY29sIG5vdCBzdXBwb3J0ZWQAU29ja2V0IHR5cGUgbm90IHN1cHBvcnRlZABOb3Qgc3VwcG9ydGVkAFByb3RvY29sIGZhbWlseSBub3Qgc3VwcG9ydGVkAEFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wAQWRkcmVzcyBub3QgYXZhaWxhYmxlAE5ldHdvcmsgaXMgZG93bgBOZXR3b3JrIHVucmVhY2hhYmxlAENvbm5lY3Rpb24gcmVzZXQgYnkgbmV0d29yawBDb25uZWN0aW9uIGFib3J0ZWQATm8gYnVmZmVyIHNwYWNlIGF2YWlsYWJsZQBTb2NrZXQgaXMgY29ubmVjdGVkAFNvY2tldCBub3QgY29ubmVjdGVkAENhbm5vdCBzZW5kIGFmdGVyIHNvY2tldCBzaHV0ZG93bgBPcGVyYXRpb24gYWxyZWFkeSBpbiBwcm9ncmVzcwBPcGVyYXRpb24gaW4gcHJvZ3Jlc3MAU3RhbGUgZmlsZSBoYW5kbGUAUmVtb3RlIEkvTyBlcnJvcgBRdW90YSBleGNlZWRlZABObyBtZWRpdW0gZm91bmQAV3JvbmcgbWVkaXVtIHR5cGUATm8gZXJyb3IgaW5mb3JtYXRpb24AQcCAAQuFARMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAgERQADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAQfSCAQsCXEQAQbCDAQsQ/////////////////////w=="; + if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); + } + function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + var binary = tryParseAsDataURI(file); + if (binary) { + return binary; + } + if (readBinary) { + return readBinary(file); + } else { + throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"; + } + } catch (err2) { + abort(err2); + } + } + function instantiateSync(file, info) { + var instance; + var module2; + var binary; + try { + binary = getBinary(file); + module2 = new WebAssembly.Module(binary); + instance = new WebAssembly.Instance(module2, info); + } catch (e) { + var str = e.toString(); + err("failed to compile wasm module: " + str); + if (str.includes("imported Memory") || str.includes("memory import")) { + err( + "Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)." + ); + } + throw e; + } + return [instance, module2]; + } + function createWasm() { + var info = { a: asmLibraryArg }; + function receiveInstance(instance, module2) { + var exports3 = instance.exports; + Module["asm"] = exports3; + wasmMemory = Module["asm"]["g"]; + updateGlobalBufferAndViews(wasmMemory.buffer); + wasmTable = Module["asm"]["W"]; + addOnInit(Module["asm"]["h"]); + removeRunDependency(); + } + addRunDependency(); + if (Module["instantiateWasm"]) { + try { + var exports2 = Module["instantiateWasm"](info, receiveInstance); + return exports2; + } catch (e) { + err("Module.instantiateWasm callback failed with error: " + e); + return false; + } + } + var result = instantiateSync(wasmBinaryFile, info); + receiveInstance(result[0]); + return Module["asm"]; + } + function LE_HEAP_LOAD_F32(byteOffset) { + return HEAP_DATA_VIEW.getFloat32(byteOffset, true); + } + function LE_HEAP_LOAD_F64(byteOffset) { + return HEAP_DATA_VIEW.getFloat64(byteOffset, true); + } + function LE_HEAP_LOAD_I16(byteOffset) { + return HEAP_DATA_VIEW.getInt16(byteOffset, true); + } + function LE_HEAP_LOAD_I32(byteOffset) { + return HEAP_DATA_VIEW.getInt32(byteOffset, true); + } + function LE_HEAP_STORE_I32(byteOffset, value) { + HEAP_DATA_VIEW.setInt32(byteOffset, value, true); + } + function callRuntimeCallbacks(callbacks) { + while (callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == "function") { + callback(Module); + continue; + } + var func = callback.func; + if (typeof func === "number") { + if (callback.arg === void 0) { + wasmTable.get(func)(); + } else { + wasmTable.get(func)(callback.arg); + } + } else { + func(callback.arg === void 0 ? null : callback.arg); + } + } + } + function _gmtime_r(time, tmPtr) { + var date = new Date(LE_HEAP_LOAD_I32((time >> 2) * 4) * 1e3); + LE_HEAP_STORE_I32((tmPtr >> 2) * 4, date.getUTCSeconds()); + LE_HEAP_STORE_I32((tmPtr + 4 >> 2) * 4, date.getUTCMinutes()); + LE_HEAP_STORE_I32((tmPtr + 8 >> 2) * 4, date.getUTCHours()); + LE_HEAP_STORE_I32((tmPtr + 12 >> 2) * 4, date.getUTCDate()); + LE_HEAP_STORE_I32((tmPtr + 16 >> 2) * 4, date.getUTCMonth()); + LE_HEAP_STORE_I32((tmPtr + 20 >> 2) * 4, date.getUTCFullYear() - 1900); + LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); + LE_HEAP_STORE_I32((tmPtr + 36 >> 2) * 4, 0); + LE_HEAP_STORE_I32((tmPtr + 32 >> 2) * 4, 0); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); + if (!_gmtime_r.GMTString) _gmtime_r.GMTString = allocateUTF8("GMT"); + LE_HEAP_STORE_I32((tmPtr + 40 >> 2) * 4, _gmtime_r.GMTString); + return tmPtr; + } + function ___gmtime_r(a0, a1) { + return _gmtime_r(a0, a1); + } + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + function emscripten_realloc_buffer(size) { + try { + wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); + updateGlobalBufferAndViews(wasmMemory.buffer); + return 1; + } catch (e) { + } + } + function _emscripten_resize_heap(requestedSize) { + var oldSize = HEAPU8.length; + requestedSize = requestedSize >>> 0; + var maxHeapSize = 2147483648; + if (requestedSize > maxHeapSize) { + return false; + } + for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { + var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); + overGrownHeapSize = Math.min( + overGrownHeapSize, + requestedSize + 100663296 + ); + var newSize = Math.min( + maxHeapSize, + alignUp(Math.max(requestedSize, overGrownHeapSize), 65536) + ); + var replacement = emscripten_realloc_buffer(newSize); + if (replacement) { + return true; + } + } + return false; + } + function _setTempRet0(val) { + } + function _time(ptr) { + var ret = Date.now() / 1e3 | 0; + if (ptr) { + LE_HEAP_STORE_I32((ptr >> 2) * 4, ret); + } + return ret; + } + function _tzset() { + if (_tzset.called) return; + _tzset.called = true; + var currentYear = (/* @__PURE__ */ new Date()).getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + LE_HEAP_STORE_I32((__get_timezone() >> 2) * 4, stdTimezoneOffset * 60); + LE_HEAP_STORE_I32( + (__get_daylight() >> 2) * 4, + Number(winterOffset != summerOffset) + ); + function extractZone(date) { + var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/); + return match ? match[1] : "GMT"; + } + var winterName = extractZone(winter); + var summerName = extractZone(summer); + var winterNamePtr = allocateUTF8(winterName); + var summerNamePtr = allocateUTF8(summerName); + if (summerOffset < winterOffset) { + LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, winterNamePtr); + LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, summerNamePtr); + } else { + LE_HEAP_STORE_I32((__get_tzname() >> 2) * 4, summerNamePtr); + LE_HEAP_STORE_I32((__get_tzname() + 4 >> 2) * 4, winterNamePtr); + } + } + function _timegm(tmPtr) { + _tzset(); + var time = Date.UTC( + LE_HEAP_LOAD_I32((tmPtr + 20 >> 2) * 4) + 1900, + LE_HEAP_LOAD_I32((tmPtr + 16 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 12 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 8 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr + 4 >> 2) * 4), + LE_HEAP_LOAD_I32((tmPtr >> 2) * 4), + 0 + ); + var date = new Date(time); + LE_HEAP_STORE_I32((tmPtr + 24 >> 2) * 4, date.getUTCDay()); + var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0); + var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0; + LE_HEAP_STORE_I32((tmPtr + 28 >> 2) * 4, yday); + return date.getTime() / 1e3 | 0; + } + function intArrayFromBase64(s) { + { + var buf; + try { + buf = Buffer.from(s, "base64"); + } catch (_) { + buf = new Buffer(s, "base64"); + } + return new Uint8Array( + buf["buffer"], + buf["byteOffset"], + buf["byteLength"] + ); + } + } + function tryParseAsDataURI(filename) { + if (!isDataURI(filename)) { + return; + } + return intArrayFromBase64(filename.slice(dataURIPrefix.length)); + } + var asmLibraryArg = { + e: ___gmtime_r, + c: _emscripten_memcpy_big, + d: _emscripten_resize_heap, + a: _setTempRet0, + b: _time, + f: _timegm + }; + var asm = createWasm(); + Module["___wasm_call_ctors"] = asm["h"]; + Module["_zip_ext_count_symlinks"] = asm["i"]; + Module["_zip_file_get_external_attributes"] = asm["j"]; + Module["_zipstruct_statS"] = asm["k"]; + Module["_zipstruct_stat_size"] = asm["l"]; + Module["_zipstruct_stat_mtime"] = asm["m"]; + Module["_zipstruct_stat_crc"] = asm["n"]; + Module["_zipstruct_errorS"] = asm["o"]; + Module["_zipstruct_error_code_zip"] = asm["p"]; + Module["_zipstruct_stat_comp_size"] = asm["q"]; + Module["_zipstruct_stat_comp_method"] = asm["r"]; + Module["_zip_close"] = asm["s"]; + Module["_zip_delete"] = asm["t"]; + Module["_zip_dir_add"] = asm["u"]; + Module["_zip_discard"] = asm["v"]; + Module["_zip_error_init_with_code"] = asm["w"]; + Module["_zip_get_error"] = asm["x"]; + Module["_zip_file_get_error"] = asm["y"]; + Module["_zip_error_strerror"] = asm["z"]; + Module["_zip_fclose"] = asm["A"]; + Module["_zip_file_add"] = asm["B"]; + Module["_free"] = asm["C"]; + var _malloc = Module["_malloc"] = asm["D"]; + Module["_zip_source_error"] = asm["E"]; + Module["_zip_source_seek"] = asm["F"]; + Module["_zip_file_set_external_attributes"] = asm["G"]; + Module["_zip_file_set_mtime"] = asm["H"]; + Module["_zip_fopen_index"] = asm["I"]; + Module["_zip_fread"] = asm["J"]; + Module["_zip_get_name"] = asm["K"]; + Module["_zip_get_num_entries"] = asm["L"]; + Module["_zip_source_read"] = asm["M"]; + Module["_zip_name_locate"] = asm["N"]; + Module["_zip_open_from_source"] = asm["O"]; + Module["_zip_set_file_compression"] = asm["P"]; + Module["_zip_source_buffer"] = asm["Q"]; + Module["_zip_source_buffer_create"] = asm["R"]; + Module["_zip_source_close"] = asm["S"]; + Module["_zip_source_free"] = asm["T"]; + Module["_zip_source_keep"] = asm["U"]; + Module["_zip_source_open"] = asm["V"]; + Module["_zip_source_tell"] = asm["X"]; + Module["_zip_stat_index"] = asm["Y"]; + var __get_tzname = Module["__get_tzname"] = asm["Z"]; + var __get_daylight = Module["__get_daylight"] = asm["_"]; + var __get_timezone = Module["__get_timezone"] = asm["$"]; + var stackSave = Module["stackSave"] = asm["aa"]; + var stackRestore = Module["stackRestore"] = asm["ba"]; + var stackAlloc = Module["stackAlloc"] = asm["ca"]; + Module["cwrap"] = cwrap; + Module["getValue"] = getValue; + var calledRun; + dependenciesFulfilled = function runCaller() { + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; + }; + function run(args) { + if (runDependencies > 0) { + return; + } + preRun(); + if (runDependencies > 0) { + return; + } + function doRun() { + if (calledRun) return; + calledRun = true; + Module["calledRun"] = true; + if (ABORT) return; + initRuntime(); + readyPromiseResolve(Module); + if (Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"](); + postRun(); + } + if (Module["setStatus"]) { + Module["setStatus"]("Running..."); + setTimeout(function() { + setTimeout(function() { + Module["setStatus"](""); + }, 1); + doRun(); + }, 1); + } else { + doRun(); + } + } + Module["run"] = run; + if (Module["preInit"]) { + if (typeof Module["preInit"] == "function") + Module["preInit"] = [Module["preInit"]]; + while (Module["preInit"].length > 0) { + Module["preInit"].pop()(); + } + } + run(); + return createModule2; + }; +}(); +module.exports = createModule; +}(libzipSync)); + +const createModule = libzipSync.exports; + +const number64 = [ + `number`, + // low + `number` + // high +]; +var Errors = /* @__PURE__ */ ((Errors2) => { + Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK"; + Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK"; + Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME"; + Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE"; + Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK"; + Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ"; + Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE"; + Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC"; + Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED"; + Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT"; + Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS"; + Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN"; + Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN"; + Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB"; + Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY"; + Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED"; + Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP"; + Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF"; + Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL"; + Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP"; + Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL"; + Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS"; + Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE"; + Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED"; + Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP"; + Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY"; + Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD"; + Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD"; + Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP"; + Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE"; + Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL"; + Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA"; + return Errors2; +})(Errors || {}); +const makeInterface = (emZip) => ({ + // Those are getters because they can change after memory growth + get HEAPU8() { + return emZip.HEAPU8; + }, + errors: Errors, + SEEK_SET: 0, + SEEK_CUR: 1, + SEEK_END: 2, + ZIP_CHECKCONS: 4, + ZIP_EXCL: 2, + ZIP_RDONLY: 16, + ZIP_FL_OVERWRITE: 8192, + ZIP_FL_COMPRESSED: 4, + ZIP_OPSYS_DOS: 0, + ZIP_OPSYS_AMIGA: 1, + ZIP_OPSYS_OPENVMS: 2, + ZIP_OPSYS_UNIX: 3, + ZIP_OPSYS_VM_CMS: 4, + ZIP_OPSYS_ATARI_ST: 5, + ZIP_OPSYS_OS_2: 6, + ZIP_OPSYS_MACINTOSH: 7, + ZIP_OPSYS_Z_SYSTEM: 8, + ZIP_OPSYS_CPM: 9, + ZIP_OPSYS_WINDOWS_NTFS: 10, + ZIP_OPSYS_MVS: 11, + ZIP_OPSYS_VSE: 12, + ZIP_OPSYS_ACORN_RISC: 13, + ZIP_OPSYS_VFAT: 14, + ZIP_OPSYS_ALTERNATE_MVS: 15, + ZIP_OPSYS_BEOS: 16, + ZIP_OPSYS_TANDEM: 17, + ZIP_OPSYS_OS_400: 18, + ZIP_OPSYS_OS_X: 19, + ZIP_CM_DEFAULT: -1, + ZIP_CM_STORE: 0, + ZIP_CM_DEFLATE: 8, + uint08S: emZip._malloc(1), + uint32S: emZip._malloc(4), + malloc: emZip._malloc, + free: emZip._free, + getValue: emZip.getValue, + openFromSource: emZip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]), + close: emZip.cwrap(`zip_close`, `number`, [`number`]), + discard: emZip.cwrap(`zip_discard`, null, [`number`]), + getError: emZip.cwrap(`zip_get_error`, `number`, [`number`]), + getName: emZip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), + getNumEntries: emZip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), + delete: emZip.cwrap(`zip_delete`, `number`, [`number`, `number`]), + statIndex: emZip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), + fopenIndex: emZip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), + fread: emZip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), + fclose: emZip.cwrap(`zip_fclose`, `number`, [`number`]), + dir: { + add: emZip.cwrap(`zip_dir_add`, `number`, [`number`, `string`]) + }, + file: { + add: emZip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), + getError: emZip.cwrap(`zip_file_get_error`, `number`, [`number`]), + getExternalAttributes: emZip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setExternalAttributes: emZip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setMtime: emZip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), + setCompression: emZip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`]) + }, + ext: { + countSymlinks: emZip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`]) + }, + error: { + initWithCode: emZip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]), + strerror: emZip.cwrap(`zip_error_strerror`, `string`, [`number`]) + }, + name: { + locate: emZip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]) + }, + source: { + fromUnattachedBuffer: emZip.cwrap(`zip_source_buffer_create`, `number`, [`number`, ...number64, `number`, `number`]), + fromBuffer: emZip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), + free: emZip.cwrap(`zip_source_free`, null, [`number`]), + keep: emZip.cwrap(`zip_source_keep`, null, [`number`]), + open: emZip.cwrap(`zip_source_open`, `number`, [`number`]), + close: emZip.cwrap(`zip_source_close`, `number`, [`number`]), + seek: emZip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]), + tell: emZip.cwrap(`zip_source_tell`, `number`, [`number`]), + read: emZip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]), + error: emZip.cwrap(`zip_source_error`, `number`, [`number`]) + }, + struct: { + statS: emZip.cwrap(`zipstruct_statS`, `number`, []), + statSize: emZip.cwrap(`zipstruct_stat_size`, `number`, [`number`]), + statCompSize: emZip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]), + statCompMethod: emZip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]), + statMtime: emZip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), + statCrc: emZip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]), + errorS: emZip.cwrap(`zipstruct_errorS`, `number`, []), + errorCodeZip: emZip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`]) + } +}); + +function getArchivePart(path, extension) { + let idx = path.indexOf(extension); + if (idx <= 0) + return null; + let nextCharIdx = idx; + while (idx >= 0) { + nextCharIdx = idx + extension.length; + if (path[nextCharIdx] === ppath.sep) + break; + if (path[idx - 1] === ppath.sep) + return null; + idx = path.indexOf(extension, nextCharIdx); + } + if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep) + return null; + return path.slice(0, nextCharIdx); +} +class ZipOpenFS extends MountFS { + static async openPromise(fn, opts) { + const zipOpenFs = new ZipOpenFS(opts); + try { + return await fn(zipOpenFs); + } finally { + zipOpenFs.saveAndClose(); + } + } + constructor(opts = {}) { + const fileExtensions = opts.fileExtensions; + const readOnlyArchives = opts.readOnlyArchives; + const getMountPoint = typeof fileExtensions === `undefined` ? (path) => getArchivePart(path, `.zip`) : (path) => { + for (const extension of fileExtensions) { + const result = getArchivePart(path, extension); + if (result) { + return result; + } + } + return null; + }; + const factorySync = (baseFs, p) => { + return new ZipFS(p, { + baseFs, + readOnly: readOnlyArchives, + stats: baseFs.statSync(p), + customZipImplementation: opts.customZipImplementation + }); + }; + const factoryPromise = async (baseFs, p) => { + const zipOptions = { + baseFs, + readOnly: readOnlyArchives, + stats: await baseFs.statPromise(p), + customZipImplementation: opts.customZipImplementation + }; + return () => { + return new ZipFS(p, zipOptions); + }; + }; + super({ + ...opts, + factorySync, + factoryPromise, + getMountPoint + }); + } +} + +class LibzipError extends Error { + code; + constructor(message, code) { + super(message); + this.name = `Libzip Error`; + this.code = code; + } +} +class LibZipImpl { + libzip; + lzSource; + zip; + listings; + symlinkCount; + filesShouldBeCached = true; + constructor(opts) { + const buffer = `buffer` in opts ? opts.buffer : opts.baseFs.readFileSync(opts.path); + this.libzip = getInstance(); + const errPtr = this.libzip.malloc(4); + try { + let flags = 0; + if (opts.readOnly) + flags |= this.libzip.ZIP_RDONLY; + const lzSource = this.allocateUnattachedSource(buffer); + try { + this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); + this.lzSource = lzSource; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + if (this.zip === 0) { + const error = this.libzip.struct.errorS(); + this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); + throw this.makeLibzipError(error); + } + } finally { + this.libzip.free(errPtr); + } + const entryCount = this.libzip.getNumEntries(this.zip, 0); + const listings = new Array(entryCount); + for (let t = 0; t < entryCount; ++t) + listings[t] = this.libzip.getName(this.zip, t, 0); + this.listings = listings; + this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); + if (this.symlinkCount === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + getSymlinkCount() { + return this.symlinkCount; + } + getListings() { + return this.listings; + } + stat(entry) { + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statSize(stat) >>> 0; + const mtime = this.libzip.struct.statMtime(stat) >>> 0; + const crc = this.libzip.struct.statCrc(stat) >>> 0; + return { size, mtime, crc }; + } + makeLibzipError(error) { + const errorCode = this.libzip.struct.errorCodeZip(error); + const strerror = this.libzip.error.strerror(error); + const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); + if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) + throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); + return libzipError; + } + setFileSource(target, compression, buffer) { + const lzSource = this.allocateSource(buffer); + try { + const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); + if (newIndex === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (compression !== null) { + const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, compression[0], compression[1]); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + return newIndex; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + } + setMtime(entry, mtime) { + const rc = this.libzip.file.setMtime(this.zip, entry, 0, mtime, 0); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + getExternalAttributes(index) { + const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (attrs === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 0; + return [opsys, attributes]; + } + setExternalAttributes(index, opsys, attributes) { + const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, opsys, attributes); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + locate(name) { + return this.libzip.name.locate(this.zip, name, 0); + } + getFileSource(index) { + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statCompSize(stat); + const compressionMethod = this.libzip.struct.statCompMethod(stat); + const buffer = this.libzip.malloc(size); + try { + const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); + if (file === 0) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + try { + const rc2 = this.libzip.fread(file, buffer, size, 0); + if (rc2 === -1) + throw this.makeLibzipError(this.libzip.file.getError(file)); + else if (rc2 < size) + throw new Error(`Incomplete read`); + else if (rc2 > size) + throw new Error(`Overread`); + const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + return { data, compressionMethod }; + } finally { + this.libzip.fclose(file); + } + } finally { + this.libzip.free(buffer); + } + } + deleteEntry(index) { + const rc = this.libzip.delete(this.zip, index); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + addDirectory(path) { + const index = this.libzip.dir.add(this.zip, path); + if (index === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + return index; + } + getBufferAndClose() { + try { + this.libzip.source.keep(this.lzSource); + if (this.libzip.close(this.zip) === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (this.libzip.source.open(this.lzSource) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const size = this.libzip.source.tell(this.lzSource); + if (size === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const buffer = this.libzip.malloc(size); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + try { + const rc = this.libzip.source.read(this.lzSource, buffer, size); + if (rc === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); + if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) + result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); + return result; + } finally { + this.libzip.free(buffer); + } + } finally { + this.libzip.source.close(this.lzSource); + this.libzip.source.free(this.lzSource); + } + } + allocateBuffer(content) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content); + const buffer = this.libzip.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content); + return { buffer, byteLength: content.byteLength }; + } + allocateUnattachedSource(content) { + const error = this.libzip.struct.errorS(); + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); + if (source === 0) { + this.libzip.free(error); + throw this.makeLibzipError(error); + } + return source; + } + allocateSource(content) { + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); + if (source === 0) { + this.libzip.free(buffer); + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + return source; + } + discard() { + this.libzip.discard(this.zip); + } +} + +const ZIP_UNIX = 3; +const STORE = 0; +const DEFLATE = 8; +const DEFAULT_COMPRESSION_LEVEL = `mixed`; +function toUnixTimestamp(time) { + if (typeof time === `string` && String(+time) === time) + return +time; + if (typeof time === `number` && Number.isFinite(time)) { + if (time < 0) { + return Date.now() / 1e3; + } else { + return time; + } + } + if (nodeUtils.types.isDate(time)) + return time.getTime() / 1e3; + throw new Error(`Invalid time`); +} +function makeEmptyArchive() { + return Buffer.from([ + 80, + 75, + 5, + 6, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ]); +} +class ZipFS extends BasePortableFakeFS { + baseFs; + path; + stats; + level; + zipImpl; + listings = /* @__PURE__ */ new Map(); + entries = /* @__PURE__ */ new Map(); + /** + * A cache of indices mapped to file sources. + * Populated by `setFileSource` calls. + * Required for supporting read after write. + */ + fileSources = /* @__PURE__ */ new Map(); + symlinkCount; + fds = /* @__PURE__ */ new Map(); + nextFd = 0; + ready = false; + readOnly = false; + constructor(source, opts = {}) { + super(); + if (opts.readOnly) + this.readOnly = true; + const pathOptions = opts; + this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; + const ZipImplCls = opts.customZipImplementation ?? LibZipImpl; + if (typeof source === `string`) { + const { baseFs = new NodeFS() } = pathOptions; + this.baseFs = baseFs; + this.path = source; + } else { + this.path = null; + this.baseFs = null; + } + if (opts.stats) { + this.stats = opts.stats; + } else { + if (typeof source === `string`) { + try { + this.stats = this.baseFs.statSync(source); + } catch (error) { + if (error.code === `ENOENT` && pathOptions.create) { + this.stats = makeDefaultStats(); + } else { + throw error; + } + } + } else { + this.stats = makeDefaultStats(); + } + } + if (typeof source === `string`) { + if (opts.create) { + this.zipImpl = new ZipImplCls({ buffer: makeEmptyArchive(), readOnly: this.readOnly }); + } else { + this.zipImpl = new ZipImplCls({ path: source, baseFs: this.baseFs, readOnly: this.readOnly, size: this.stats.size }); + } + } else { + this.zipImpl = new ZipImplCls({ buffer: source ?? makeEmptyArchive(), readOnly: this.readOnly }); + } + this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()); + const listings = this.zipImpl.getListings(); + for (let t = 0; t < listings.length; t++) { + const raw = listings[t]; + if (ppath.isAbsolute(raw)) + continue; + const p = ppath.resolve(PortablePath.root, raw); + this.registerEntry(p, t); + if (raw.endsWith(`/`)) { + this.registerListing(p); + } + } + this.symlinkCount = this.zipImpl.getSymlinkCount(); + this.ready = true; + } + getExtractHint(hints) { + for (const fileName of this.entries.keys()) { + const ext = this.pathUtils.extname(fileName); + if (hints.relevantExtensions.has(ext)) { + return true; + } + } + return false; + } + getAllFiles() { + return Array.from(this.entries.keys()); + } + getRealPath() { + if (!this.path) + throw new Error(`ZipFS don't have real paths when loaded from a buffer`); + return this.path; + } + prepareClose() { + if (!this.ready) + throw EBUSY(`archive closed, close`); + unwatchAllFiles(this); + } + getBufferAndClose() { + this.prepareClose(); + if (this.entries.size === 0) { + this.discardAndClose(); + return makeEmptyArchive(); + } + try { + return this.zipImpl.getBufferAndClose(); + } finally { + this.ready = false; + } + } + discardAndClose() { + this.prepareClose(); + this.zipImpl.discard(); + this.ready = false; + } + saveAndClose() { + if (!this.path || !this.baseFs) + throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`); + if (this.readOnly) { + this.discardAndClose(); + return; + } + const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode; + this.baseFs.writeFileSync(this.path, this.getBufferAndClose(), { mode: newMode }); + this.ready = false; + } + resolve(p) { + return ppath.resolve(PortablePath.root, p); + } + async openPromise(p, flags, mode) { + return this.openSync(p, flags, mode); + } + openSync(p, flags, mode) { + const fd = this.nextFd++; + this.fds.set(fd, { cursor: 0, p }); + return fd; + } + hasOpenFileHandles() { + return !!this.fds.size; + } + async opendirPromise(p, opts) { + return this.opendirSync(p, opts); + } + opendirSync(p, opts = {}) { + const resolvedP = this.resolveFilename(`opendir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`opendir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`opendir '${p}'`); + const entries = [...directoryListing]; + const fd = this.openSync(resolvedP, `r`); + const onClose = () => { + this.closeSync(fd); + }; + return opendir(this, resolvedP, entries, { onClose }); + } + async readPromise(fd, buffer, offset, length, position) { + return this.readSync(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + const realPosition = position === -1 || position === null ? entry.cursor : position; + const source = this.readFileSync(entry.p); + source.copy(buffer, offset, realPosition, realPosition + length); + const bytesRead = Math.max(0, Math.min(source.length - realPosition, length)); + if (position === -1 || position === null) + entry.cursor += bytesRead; + return bytesRead; + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.writeSync(fd, buffer, position); + } else { + return this.writeSync(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + throw new Error(`Unimplemented`); + } + async closePromise(fd) { + return this.closeSync(fd); + } + closeSync(fd) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`read`); + this.fds.delete(fd); + } + createReadStream(p, { encoding } = {}) { + if (p === null) + throw new Error(`Unimplemented`); + const fd = this.openSync(p, `r`); + const stream$1 = Object.assign( + new stream.PassThrough({ + emitClose: true, + autoDestroy: true, + destroy: (error, callback) => { + clearImmediate(immediate); + this.closeSync(fd); + callback(error); + } + }), + { + close() { + stream$1.destroy(); + }, + bytesRead: 0, + path: p, + // "This property is `true` if the underlying file has not been opened yet" + pending: false + } + ); + const immediate = setImmediate(async () => { + try { + const data = await this.readFilePromise(p, encoding); + stream$1.bytesRead = data.length; + stream$1.end(data); + } catch (error) { + stream$1.destroy(error); + } + }); + return stream$1; + } + createWriteStream(p, { encoding } = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (p === null) + throw new Error(`Unimplemented`); + const chunks = []; + const fd = this.openSync(p, `w`); + const stream$1 = Object.assign( + new stream.PassThrough({ + autoDestroy: true, + emitClose: true, + destroy: (error, callback) => { + try { + if (error) { + callback(error); + } else { + this.writeFileSync(p, Buffer.concat(chunks), encoding); + callback(null); + } + } catch (err) { + callback(err); + } finally { + this.closeSync(fd); + } + } + }), + { + close() { + stream$1.destroy(); + }, + bytesWritten: 0, + path: p, + // "This property is `true` if the underlying file has not been opened yet" + pending: false + } + ); + stream$1.on(`data`, (chunk) => { + const chunkBuffer = Buffer.from(chunk); + stream$1.bytesWritten += chunkBuffer.length; + chunks.push(chunkBuffer); + }); + return stream$1; + } + async realpathPromise(p) { + return this.realpathSync(p); + } + realpathSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`lstat '${p}'`); + return resolvedP; + } + async existsPromise(p) { + return this.existsSync(p); + } + existsSync(p) { + if (!this.ready) + throw EBUSY(`archive closed, existsSync '${p}'`); + if (this.symlinkCount === 0) { + const resolvedP2 = ppath.resolve(PortablePath.root, p); + return this.entries.has(resolvedP2) || this.listings.has(resolvedP2); + } + let resolvedP; + try { + resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false); + } catch { + return false; + } + if (resolvedP === void 0) + return false; + return this.entries.has(resolvedP) || this.listings.has(resolvedP); + } + async accessPromise(p, mode) { + return this.accessSync(p, mode); + } + accessSync(p, mode = fs.constants.F_OK) { + const resolvedP = this.resolveFilename(`access '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`access '${p}'`); + if (this.readOnly && mode & fs.constants.W_OK) { + throw EROFS(`access '${p}'`); + } + } + async statPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.statSync(p, { bigint: true }); + return this.statSync(p); + } + statSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`stat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`stat '${p}'`, resolvedP, opts); + } + async fstatPromise(fd, opts) { + return this.fstatSync(fd, opts); + } + fstatSync(fd, opts) { + const entry = this.fds.get(fd); + if (typeof entry === `undefined`) + throw EBADF(`fstatSync`); + const { p } = entry; + const resolvedP = this.resolveFilename(`stat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`stat '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`stat '${p}'`); + return this.statImpl(`fstat '${p}'`, resolvedP, opts); + } + async lstatPromise(p, opts = { bigint: false }) { + if (opts.bigint) + return this.lstatSync(p, { bigint: true }); + return this.lstatSync(p); + } + lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry); + if (resolvedP === void 0) + return void 0; + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + if (opts.throwIfNoEntry === false) + return void 0; + throw ENOENT(`lstat '${p}'`); + } + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`lstat '${p}'`); + return this.statImpl(`lstat '${p}'`, resolvedP, opts); + } + statImpl(reason, p, opts = {}) { + const entry = this.entries.get(p); + if (typeof entry !== `undefined`) { + const stat = this.zipImpl.stat(entry); + const crc = stat.crc; + const size = stat.size; + const mtimeMs = stat.mtime * 1e3; + const uid = this.stats.uid; + const gid = this.stats.gid; + const blksize = 512; + const blocks = Math.ceil(stat.size / blksize); + const atimeMs = mtimeMs; + const birthtimeMs = mtimeMs; + const ctimeMs = mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const type = this.listings.has(p) ? fs.constants.S_IFDIR : this.isSymbolicLink(entry) ? fs.constants.S_IFLNK : fs.constants.S_IFREG; + const defaultMode = type === fs.constants.S_IFDIR ? 493 : 420; + const mode = type | this.getUnixMode(entry, defaultMode) & 511; + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + if (this.listings.has(p)) { + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = 0; + const blksize = 512; + const blocks = 0; + const atimeMs = this.stats.mtimeMs; + const birthtimeMs = this.stats.mtimeMs; + const ctimeMs = this.stats.mtimeMs; + const mtimeMs = this.stats.mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = fs.constants.S_IFDIR | 493; + const crc = 0; + const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); + return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; + } + throw new Error(`Unreachable`); + } + getUnixMode(index, defaultMode) { + const [opsys, attributes] = this.zipImpl.getExternalAttributes(index); + if (opsys !== ZIP_UNIX) + return defaultMode; + return attributes >>> 16; + } + registerListing(p) { + const existingListing = this.listings.get(p); + if (existingListing) + return existingListing; + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + const newListing = /* @__PURE__ */ new Set(); + this.listings.set(p, newListing); + return newListing; + } + registerEntry(p, index) { + const parentListing = this.registerListing(ppath.dirname(p)); + parentListing.add(ppath.basename(p)); + this.entries.set(p, index); + } + unregisterListing(p) { + this.listings.delete(p); + const parentListing = this.listings.get(ppath.dirname(p)); + parentListing?.delete(ppath.basename(p)); + } + unregisterEntry(p) { + this.unregisterListing(p); + const entry = this.entries.get(p); + this.entries.delete(p); + if (typeof entry === `undefined`) + return; + this.fileSources.delete(entry); + if (this.isSymbolicLink(entry)) { + this.symlinkCount--; + } + } + deleteEntry(p, index) { + this.unregisterEntry(p); + this.zipImpl.deleteEntry(index); + } + resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) { + if (!this.ready) + throw EBUSY(`archive closed, ${reason}`); + let resolvedP = ppath.resolve(PortablePath.root, p); + if (resolvedP === `/`) + return PortablePath.root; + const fileIndex = this.entries.get(resolvedP); + if (resolveLastComponent && fileIndex !== void 0) { + if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) { + const target = this.getFileSource(fileIndex).toString(); + return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry); + } else { + return resolvedP; + } + } + while (true) { + const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry); + if (parentP === void 0) + return parentP; + const isDir = this.listings.has(parentP); + const doesExist = this.entries.has(parentP); + if (!isDir && !doesExist) { + if (throwIfNoEntry === false) + return void 0; + throw ENOENT(reason); + } + if (!isDir) + throw ENOTDIR(reason); + resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)); + if (!resolveLastComponent || this.symlinkCount === 0) + break; + const index = this.zipImpl.locate(resolvedP.slice(1)); + if (index === -1) + break; + if (this.isSymbolicLink(index)) { + const target = this.getFileSource(index).toString(); + resolvedP = ppath.resolve(ppath.dirname(resolvedP), target); + } else { + break; + } + } + return resolvedP; + } + setFileSource(p, content) { + const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content); + const target = ppath.relative(PortablePath.root, p); + let compression = null; + if (this.level !== `mixed`) { + const method = this.level === 0 ? STORE : DEFLATE; + compression = [method, this.level]; + } + const newIndex = this.zipImpl.setFileSource(target, compression, buffer); + this.fileSources.set(newIndex, buffer); + return newIndex; + } + isSymbolicLink(index) { + if (this.symlinkCount === 0) + return false; + const [opsys, attrs] = this.zipImpl.getExternalAttributes(index); + if (opsys !== ZIP_UNIX) + return false; + const attributes = attrs >>> 16; + return (attributes & fs.constants.S_IFMT) === fs.constants.S_IFLNK; + } + getFileSource(index, opts = { asyncDecompress: false }) { + const cachedFileSource = this.fileSources.get(index); + if (typeof cachedFileSource !== `undefined`) + return cachedFileSource; + const { data, compressionMethod } = this.zipImpl.getFileSource(index); + if (compressionMethod === STORE) { + if (this.zipImpl.filesShouldBeCached) + this.fileSources.set(index, data); + return data; + } else if (compressionMethod === DEFLATE) { + if (opts.asyncDecompress) { + return new Promise((resolve, reject) => { + zlib__default.default.inflateRaw(data, (error, result) => { + if (error) { + reject(error); + } else { + if (this.zipImpl.filesShouldBeCached) + this.fileSources.set(index, result); + resolve(result); + } + }); + }); + } else { + const decompressedData = zlib__default.default.inflateRawSync(data); + if (this.zipImpl.filesShouldBeCached) + this.fileSources.set(index, decompressedData); + return decompressedData; + } + } else { + throw new Error(`Unsupported compression method: ${compressionMethod}`); + } + } + async fchmodPromise(fd, mask) { + return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask); + } + fchmodSync(fd, mask) { + return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask); + } + async chmodPromise(p, mask) { + return this.chmodSync(p, mask); + } + chmodSync(p, mask) { + if (this.readOnly) + throw EROFS(`chmod '${p}'`); + mask &= 493; + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + const entry = this.entries.get(resolvedP); + if (typeof entry === `undefined`) + throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`); + const oldMod = this.getUnixMode(entry, fs.constants.S_IFREG | 0); + const newMod = oldMod & ~511 | mask; + this.zipImpl.setExternalAttributes(entry, ZIP_UNIX, newMod << 16); + } + async fchownPromise(fd, uid, gid) { + return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid); + } + fchownSync(fd, uid, gid) { + return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid); + } + async chownPromise(p, uid, gid) { + return this.chownSync(p, uid, gid); + } + chownSync(p, uid, gid) { + throw new Error(`Unimplemented`); + } + async renamePromise(oldP, newP) { + return this.renameSync(oldP, newP); + } + renameSync(oldP, newP) { + throw new Error(`Unimplemented`); + } + async copyFilePromise(sourceP, destP, flags) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = await this.getFileSource(indexSource, { asyncDecompress: true }); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + copyFileSync(sourceP, destP, flags = 0) { + const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags); + const source = this.getFileSource(indexSource); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + prepareCopyFile(sourceP, destP, flags = 0) { + if (this.readOnly) + throw EROFS(`copyfile '${sourceP} -> '${destP}'`); + if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`); + const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); + const indexSource = this.entries.get(resolvedSourceP); + if (typeof indexSource === `undefined`) + throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`); + const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); + const indexDest = this.entries.get(resolvedDestP); + if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) + throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`); + return { + indexSource, + resolvedDestP, + indexDest + }; + } + async appendFilePromise(p, content, opts) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFilePromise(p, content, opts); + } + appendFileSync(p, content, opts = {}) { + if (this.readOnly) + throw EROFS(`open '${p}'`); + if (typeof opts === `undefined`) + opts = { flag: `a` }; + else if (typeof opts === `string`) + opts = { flag: `a`, encoding: opts }; + else if (typeof opts.flag === `undefined`) + opts = { flag: `a`, ...opts }; + return this.writeFileSync(p, content, opts); + } + fdToPath(fd, reason) { + const path = this.fds.get(fd)?.p; + if (typeof path === `undefined`) + throw EBADF(reason); + return path; + } + async writeFilePromise(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + await this.chmodPromise(resolvedP, mode); + } + } + writeFileSync(p, content, opts) { + const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts); + if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) + this.registerEntry(resolvedP, newIndex); + if (mode !== null) { + this.chmodSync(resolvedP, mode); + } + } + prepareWriteFile(p, opts) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + if (this.readOnly) + throw EROFS(`open '${p}'`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`open '${p}'`); + let encoding = null, mode = null; + if (typeof opts === `string`) { + encoding = opts; + } else if (typeof opts === `object`) { + ({ + encoding = null, + mode = null + } = opts); + } + const index = this.entries.get(resolvedP); + return { + encoding, + mode, + resolvedP, + index + }; + } + async unlinkPromise(p) { + return this.unlinkSync(p); + } + unlinkSync(p) { + if (this.readOnly) + throw EROFS(`unlink '${p}'`); + const resolvedP = this.resolveFilename(`unlink '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`unlink '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`unlink '${p}'`); + this.deleteEntry(resolvedP, index); + } + async utimesPromise(p, atime, mtime) { + return this.utimesSync(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`utimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p); + this.utimesImpl(resolvedP, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.lutimesSync(p, atime, mtime); + } + lutimesSync(p, atime, mtime) { + if (this.readOnly) + throw EROFS(`lutimes '${p}'`); + const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false); + this.utimesImpl(resolvedP, mtime); + } + utimesImpl(resolvedP, mtime) { + if (this.listings.has(resolvedP)) { + if (!this.entries.has(resolvedP)) + this.hydrateDirectory(resolvedP); + } + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + this.zipImpl.setMtime(entry, toUnixTimestamp(mtime)); + } + async mkdirPromise(p, opts) { + return this.mkdirSync(p, opts); + } + mkdirSync(p, { mode = 493, recursive = false } = {}) { + if (recursive) + return this.mkdirpSync(p, { chmod: mode }); + if (this.readOnly) + throw EROFS(`mkdir '${p}'`); + const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); + if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) + throw EEXIST(`mkdir '${p}'`); + this.hydrateDirectory(resolvedP); + this.chmodSync(resolvedP, mode); + return void 0; + } + async rmdirPromise(p, opts) { + return this.rmdirSync(p, opts); + } + rmdirSync(p, { recursive = false } = {}) { + if (this.readOnly) + throw EROFS(`rmdir '${p}'`); + if (recursive) { + this.removeSync(p); + return; + } + const resolvedP = this.resolveFilename(`rmdir '${p}'`, p); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`rmdir '${p}'`); + if (directoryListing.size > 0) + throw ENOTEMPTY(`rmdir '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`rmdir '${p}'`); + this.deleteEntry(p, index); + } + async rmPromise(p, opts) { + return this.rmSync(p, opts); + } + rmSync(p, { recursive = false } = {}) { + if (this.readOnly) + throw EROFS(`rm '${p}'`); + if (recursive) { + this.removeSync(p); + return; + } + const resolvedP = this.resolveFilename(`rm '${p}'`, p); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`rm '${p}'`); + if (directoryListing.size > 0) + throw ENOTEMPTY(`rm '${p}'`); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`rm '${p}'`); + this.deleteEntry(p, index); + } + hydrateDirectory(resolvedP) { + const index = this.zipImpl.addDirectory(ppath.relative(PortablePath.root, resolvedP)); + this.registerListing(resolvedP); + this.registerEntry(resolvedP, index); + return index; + } + async linkPromise(existingP, newP) { + return this.linkSync(existingP, newP); + } + linkSync(existingP, newP) { + throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`); + } + async symlinkPromise(target, p) { + return this.symlinkSync(target, p); + } + symlinkSync(target, p) { + if (this.readOnly) + throw EROFS(`symlink '${target}' -> '${p}'`); + const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); + if (this.listings.has(resolvedP)) + throw EISDIR(`symlink '${target}' -> '${p}'`); + if (this.entries.has(resolvedP)) + throw EEXIST(`symlink '${target}' -> '${p}'`); + const index = this.setFileSource(resolvedP, target); + this.registerEntry(resolvedP, index); + this.zipImpl.setExternalAttributes(index, ZIP_UNIX, (fs.constants.S_IFLNK | 511) << 16); + this.symlinkCount += 1; + } + async readFilePromise(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = await this.readFileBuffer(p, { asyncDecompress: true }); + return encoding ? data.toString(encoding) : data; + } + readFileSync(p, encoding) { + if (typeof encoding === `object`) + encoding = encoding ? encoding.encoding : void 0; + const data = this.readFileBuffer(p); + return encoding ? data.toString(encoding) : data; + } + readFileBuffer(p, opts = { asyncDecompress: false }) { + if (typeof p === `number`) + p = this.fdToPath(p, `read`); + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`open '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EISDIR(`read`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + return this.getFileSource(entry, opts); + } + async readdirPromise(p, opts) { + return this.readdirSync(p, opts); + } + readdirSync(p, opts) { + const resolvedP = this.resolveFilename(`scandir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`scandir '${p}'`); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw ENOTDIR(`scandir '${p}'`); + if (opts?.recursive) { + if (opts?.withFileTypes) { + const entries = Array.from(directoryListing, (name) => { + return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { + name, + path: PortablePath.dot + }); + }); + for (const entry of entries) { + if (!entry.isDirectory()) + continue; + const subPath = ppath.join(entry.path, entry.name); + const subListing = this.listings.get(ppath.join(resolvedP, subPath)); + for (const child of subListing) { + entries.push(Object.assign(this.statImpl(`lstat`, ppath.join(p, subPath, child)), { + name: child, + path: subPath + })); + } + } + return entries; + } else { + const entries = [...directoryListing]; + for (const subPath of entries) { + const subListing = this.listings.get(ppath.join(resolvedP, subPath)); + if (typeof subListing === `undefined`) + continue; + for (const child of subListing) { + entries.push(ppath.join(subPath, child)); + } + } + return entries; + } + } else if (opts?.withFileTypes) { + return Array.from(directoryListing, (name) => { + return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), { + name, + path: void 0 + }); + }); + } else { + return [...directoryListing]; + } + } + async readlinkPromise(p) { + const entry = this.prepareReadlink(p); + return (await this.getFileSource(entry, { asyncDecompress: true })).toString(); + } + readlinkSync(p) { + const entry = this.prepareReadlink(p); + return this.getFileSource(entry).toString(); + } + prepareReadlink(p) { + const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw ENOENT(`readlink '${p}'`); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw ENOTDIR(`open '${p}'`); + if (this.listings.has(resolvedP)) + throw EINVAL(`readlink '${p}'`); + const entry = this.entries.get(resolvedP); + if (entry === void 0) + throw new Error(`Unreachable`); + if (!this.isSymbolicLink(entry)) + throw EINVAL(`readlink '${p}'`); + return entry; + } + async truncatePromise(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = await this.getFileSource(index, { asyncDecompress: true }); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return await this.writeFilePromise(p, truncated); + } + truncateSync(p, len = 0) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + const index = this.entries.get(resolvedP); + if (typeof index === `undefined`) + throw EINVAL(`open '${p}'`); + const source = this.getFileSource(index); + const truncated = Buffer.alloc(len, 0); + source.copy(truncated); + return this.writeFileSync(p, truncated); + } + async ftruncatePromise(fd, len) { + return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len); + } + ftruncateSync(fd, len) { + return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len); + } + watch(p, a, b) { + let persistent; + switch (typeof a) { + case `function`: + case `string`: + case `undefined`: + { + persistent = true; + } + break; + default: + { + ({ persistent = true } = a); + } + break; + } + if (!persistent) + return { on: () => { + }, close: () => { + } }; + const interval = setInterval(() => { + }, 24 * 60 * 60 * 1e3); + return { + on: () => { + }, + close: () => { + clearInterval(interval); + } + }; + } + watchFile(p, a, b) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return watchFile(this, resolvedP, a, b); + } + unwatchFile(p, cb) { + const resolvedP = ppath.resolve(PortablePath.root, p); + return unwatchFile(this, resolvedP, cb); + } +} + +const SIGNATURE = { + CENTRAL_DIRECTORY: 33639248, + END_OF_CENTRAL_DIRECTORY: 101010256 +}; +const noCommentCDSize = 22; +class JsZipImpl { + fd; + baseFs; + entries; + filesShouldBeCached = false; + constructor(opts) { + if (`buffer` in opts) + throw new Error(`Buffer based zip archives are not supported`); + if (!opts.readOnly) + throw new Error(`Writable zip archives are not supported`); + this.baseFs = opts.baseFs; + this.fd = this.baseFs.openSync(opts.path, `r`); + try { + this.entries = JsZipImpl.readZipSync(this.fd, this.baseFs, opts.size); + } catch (error) { + this.baseFs.closeSync(this.fd); + this.fd = `closed`; + throw error; + } + } + static readZipSync(fd, baseFs, fileSize) { + if (fileSize < noCommentCDSize) + throw new Error(`Invalid ZIP file: EOCD not found`); + let eocdOffset = -1; + let eocdBuffer = Buffer.alloc(noCommentCDSize); + baseFs.readSync( + fd, + eocdBuffer, + 0, + noCommentCDSize, + fileSize - noCommentCDSize + ); + if (eocdBuffer.readUInt32LE(0) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = 0; + } else { + const bufferSize = Math.min(65557, fileSize); + eocdBuffer = Buffer.alloc(bufferSize); + baseFs.readSync( + fd, + eocdBuffer, + 0, + bufferSize, + Math.max(0, fileSize - bufferSize) + ); + for (let i = eocdBuffer.length - 4; i >= 0; i--) { + if (eocdBuffer.readUInt32LE(i) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = i; + break; + } + } + if (eocdOffset === -1) { + throw new Error(`Not a zip archive`); + } + } + const totalEntries = eocdBuffer.readUInt16LE(eocdOffset + 10); + const centralDirSize = eocdBuffer.readUInt32LE(eocdOffset + 12); + const centralDirOffset = eocdBuffer.readUInt32LE(eocdOffset + 16); + const commentLength = eocdBuffer.readUInt16LE(eocdOffset + 20); + if (eocdOffset + commentLength + noCommentCDSize > eocdBuffer.length) + throw new Error(`Zip archive inconsistent`); + if (totalEntries == 65535 || centralDirSize == 4294967295 || centralDirOffset == 4294967295) + throw new Error(`Zip 64 is not supported`); + if (centralDirSize > fileSize) + throw new Error(`Zip archive inconsistent`); + if (totalEntries > centralDirSize / 46) + throw new Error(`Zip archive inconsistent`); + const cdBuffer = Buffer.alloc(centralDirSize); + if (baseFs.readSync(fd, cdBuffer, 0, cdBuffer.length, centralDirOffset) !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + const entries = []; + let offset = 0; + let index = 0; + let sumCompressedSize = 0; + while (index < totalEntries) { + if (offset + 46 > cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + if (cdBuffer.readUInt32LE(offset) !== SIGNATURE.CENTRAL_DIRECTORY) + throw new Error(`Zip archive inconsistent`); + const versionMadeBy = cdBuffer.readUInt16LE(offset + 4); + const os = versionMadeBy >>> 8; + const flags = cdBuffer.readUInt16LE(offset + 8); + if ((flags & 1) !== 0) + throw new Error(`Encrypted zip files are not supported`); + const compressionMethod = cdBuffer.readUInt16LE(offset + 10); + const crc = cdBuffer.readUInt32LE(offset + 16); + const nameLength = cdBuffer.readUInt16LE(offset + 28); + const extraLength = cdBuffer.readUInt16LE(offset + 30); + const commentLength2 = cdBuffer.readUInt16LE(offset + 32); + const localHeaderOffset = cdBuffer.readUInt32LE(offset + 42); + const name = cdBuffer.toString(`utf8`, offset + 46, offset + 46 + nameLength).replaceAll(`\0`, ` `); + if (name.includes(`\0`)) + throw new Error(`Invalid ZIP file`); + const compressedSize = cdBuffer.readUInt32LE(offset + 20); + const externalAttributes = cdBuffer.readUInt32LE(offset + 38); + entries.push({ + name, + os, + mtime: SAFE_TIME, + //we dont care, + crc, + compressionMethod, + isSymbolicLink: os === ZIP_UNIX && (externalAttributes >>> 16 & S_IFMT) === S_IFLNK, + size: cdBuffer.readUInt32LE(offset + 24), + compressedSize, + externalAttributes, + localHeaderOffset + }); + sumCompressedSize += compressedSize; + index += 1; + offset += 46 + nameLength + extraLength + commentLength2; + } + if (sumCompressedSize > fileSize) + throw new Error(`Zip archive inconsistent`); + if (offset !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + return entries; + } + getExternalAttributes(index) { + const entry = this.entries[index]; + return [entry.os, entry.externalAttributes]; + } + getListings() { + return this.entries.map((e) => e.name); + } + getSymlinkCount() { + let count = 0; + for (const entry of this.entries) + if (entry.isSymbolicLink) + count += 1; + return count; + } + stat(index) { + const entry = this.entries[index]; + return { + crc: entry.crc, + mtime: entry.mtime, + size: entry.size + }; + } + locate(name) { + for (let ind = 0; ind < this.entries.length; ind++) + if (this.entries[ind].name === name) + return ind; + return -1; + } + getFileSource(index) { + if (this.fd === `closed`) + throw new Error(`ZIP file is closed`); + const entry = this.entries[index]; + const localHeaderBuf = Buffer.alloc(30); + this.baseFs.readSync( + this.fd, + localHeaderBuf, + 0, + localHeaderBuf.length, + entry.localHeaderOffset + ); + const nameLength = localHeaderBuf.readUInt16LE(26); + const extraLength = localHeaderBuf.readUInt16LE(28); + const buffer = Buffer.alloc(entry.compressedSize); + if (this.baseFs.readSync(this.fd, buffer, 0, entry.compressedSize, entry.localHeaderOffset + 30 + nameLength + extraLength) !== entry.compressedSize) + throw new Error(`Invalid ZIP file`); + return { data: buffer, compressionMethod: entry.compressionMethod }; + } + discard() { + if (this.fd !== `closed`) { + this.baseFs.closeSync(this.fd); + this.fd = `closed`; + } + } + addDirectory(path) { + throw new Error(`Not implemented`); + } + deleteEntry(index) { + throw new Error(`Not implemented`); + } + setMtime(index, mtime) { + throw new Error(`Not implemented`); + } + getBufferAndClose() { + throw new Error(`Not implemented`); + } + setFileSource(target, compression, buffer) { + throw new Error(`Not implemented`); + } + setExternalAttributes(index, opsys, attributes) { + throw new Error(`Not implemented`); + } +} + +setFactory(() => { + const emZip = createModule(); + return makeInterface(emZip); +}); + +var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => { + ErrorCode2["API_ERROR"] = `API_ERROR`; + ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`; + ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`; + ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`; + ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`; + ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`; + ErrorCode2["INTERNAL"] = `INTERNAL`; + ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`; + ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`; + return ErrorCode2; +})(ErrorCode || {}); +const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([ + "BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */, + "MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */, + "MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */, + "QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */, + "UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */ +]); +function makeError(pnpCode, message, data = {}, code) { + code ??= MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode; + const propertySpec = { + configurable: true, + writable: true, + enumerable: false + }; + return Object.defineProperties(new Error(message), { + code: { + ...propertySpec, + value: code + }, + pnpCode: { + ...propertySpec, + value: pnpCode + }, + data: { + ...propertySpec, + value: data + } + }); +} +function getIssuerModule(parent) { + let issuer = parent; + while (issuer && (issuer.id === `[eval]` || issuer.id === `` || !issuer.filename)) + issuer = issuer.parent; + return issuer || null; +} +function getPathForDisplay(p) { + return npath.normalize(npath.fromPortablePath(p)); +} + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; + +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs__default.default.existsSync(jsonPath)) + return null; + return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`)); +} +function ERR_REQUIRE_ESM(filename, parentPath = null) { + const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename); + const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported. +Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`; + const err = new Error(msg); + err.code = `ERR_REQUIRE_ESM`; + return err; +} +function reportRequiredFilesToWatchMode(files) { + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename)))); + if (WATCH_MODE_MESSAGE_USES_ARRAYS) { + process.send({ "watch:require": files }); + } else { + for (const filename of files) { + process.send({ "watch:require": filename }); + } + } + } +} + +function applyPatch(pnpapi, opts) { + let enableNativeHooks = true; + process.versions.pnp = String(pnpapi.VERSIONS.std); + const moduleExports = require$$0__default.default; + moduleExports.findPnpApi = (lookupSource) => { + const lookupPath = lookupSource instanceof URL ? url.fileURLToPath(lookupSource) : lookupSource; + const apiPath = opts.manager.findApiPathFor(lookupPath); + if (apiPath === null) + return null; + const apiEntry = opts.manager.getApiEntry(apiPath, true); + return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null; + }; + function getRequireStack(parent) { + const requireStack = []; + for (let cursor = parent; cursor; cursor = cursor.parent) + requireStack.push(cursor.filename || cursor.id); + return requireStack; + } + const originalModuleLoad = require$$0.Module._load; + require$$0.Module._load = function(request, parent, isMain) { + if (request === `pnpapi`) { + const parentApiPath = opts.manager.getApiPathFromParent(parent); + if (parentApiPath) { + return opts.manager.getApiEntry(parentApiPath, true).instance; + } + } + return originalModuleLoad.call(require$$0.Module, request, parent, isMain); + }; + function getIssuerSpecsFromPaths(paths) { + return paths.map((path) => ({ + apiPath: opts.manager.findApiPathFor(path), + path, + module: null + })); + } + function getIssuerSpecsFromModule(module) { + if (module && module.id !== `` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) { + return [{ + apiPath: opts.manager.findApiPathFor(module.paths[0]), + path: module.paths[0], + module + }]; + } + const issuer = getIssuerModule(module); + if (issuer !== null) { + const path = npath.dirname(issuer.filename); + const apiPath = opts.manager.getApiPathFromParent(issuer); + return [{ apiPath, path, module }]; + } else { + const path = process.cwd(); + const apiPath = opts.manager.findApiPathFor(npath.join(path, `[file]`)) ?? opts.manager.getApiPathFromParent(null); + return [{ apiPath, path, module }]; + } + } + function makeFakeParent(path) { + const fakeParent = new require$$0.Module(``); + const fakeFilePath = npath.join(path, `[file]`); + fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath); + return fakeParent; + } + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const originalModuleResolveFilename = require$$0.Module._resolveFilename; + require$$0.Module._resolveFilename = function(request, parent, isMain, options) { + if (require$$0.isBuiltin(request)) + return request; + if (!enableNativeHooks) + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options); + if (options && options.plugnplay === false) { + const { plugnplay, ...forwardedOptions } = options; + try { + enableNativeHooks = false; + return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions); + } finally { + enableNativeHooks = true; + } + } + if (options) { + const optionNames = new Set(Object.keys(options)); + optionNames.delete(`paths`); + optionNames.delete(`plugnplay`); + if (optionNames.size > 0) { + throw makeError( + ErrorCode.UNSUPPORTED, + `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})` + ); + } + } + const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent); + if (request.match(pathRegExp) === null) { + const parentDirectory = parent?.filename != null ? npath.dirname(parent.filename) : null; + const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null; + if (absoluteRequest !== null) { + const apiPath = parent && parentDirectory === npath.dirname(absoluteRequest) ? opts.manager.getApiPathFromParent(parent) : opts.manager.findApiPathFor(absoluteRequest); + if (apiPath !== null) { + issuerSpecs.unshift({ + apiPath, + path: parentDirectory, + module: null + }); + } + } + } + let firstError; + for (const { apiPath, path, module } of issuerSpecs) { + let resolution; + const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null; + try { + if (issuerApi !== null) { + resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null); + } else { + if (path === null) + throw new Error(`Assertion failed: Expected the path to be set`); + resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain); + } + } catch (error) { + firstError = firstError || error; + continue; + } + if (resolution !== null) { + return resolution; + } + } + const requireStack = getRequireStack(parent); + Object.defineProperty(firstError, `requireStack`, { + configurable: true, + writable: true, + enumerable: false, + value: requireStack + }); + if (requireStack.length > 0) + firstError.message += ` +Require stack: +- ${requireStack.join(` +- `)}`; + if (typeof firstError.pnpCode === `string`) + Error.captureStackTrace(firstError); + throw firstError; + }; + const originalFindPath = require$$0.Module._findPath; + require$$0.Module._findPath = function(request, paths, isMain) { + if (request === `pnpapi`) + return false; + if (!enableNativeHooks) + return originalFindPath.call(require$$0.Module, request, paths, isMain); + const isAbsolute = npath.isAbsolute(request); + if (isAbsolute) + paths = [``]; + else if (!paths || paths.length === 0) + return false; + for (const path of paths) { + let resolution; + try { + const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path); + if (pnpApiPath !== null) { + const api = opts.manager.getApiEntry(pnpApiPath, true).instance; + resolution = api.resolveRequest(request, path) || false; + } else { + resolution = originalFindPath.call(require$$0.Module, request, [path], isMain); + } + } catch { + continue; + } + if (resolution) { + return resolution; + } + } + return false; + }; + if (!process.features.require_module) { + const originalExtensionJSFunction = require$$0.Module._extensions[`.js`]; + require$$0.Module._extensions[`.js`] = function(module, filename) { + if (filename.endsWith(`.js`)) { + const pkg = readPackageScope(filename); + if (pkg && pkg.data?.type === `module`) { + const err = ERR_REQUIRE_ESM(filename, module.parent?.filename); + Error.captureStackTrace(err); + throw err; + } + } + originalExtensionJSFunction.call(this, module, filename); + }; + } + const originalDlopen = process.dlopen; + process.dlopen = function(...args) { + const [module, filename, ...rest] = args; + return originalDlopen.call( + this, + module, + npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))), + ...rest + ); + }; + const originalEmit = process.emit; + process.emit = function(name, data, ...args) { + if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`))) + return false; + return originalEmit.apply(process, arguments); + }; + patchFs(fs__default.default, new PosixFS(opts.fakeFs)); +} + +function hydrateRuntimeState(data, { basePath }) { + const portablePath = npath.toPortablePath(basePath); + const absolutePortablePath = ppath.resolve(portablePath); + const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null; + const packageLocatorsByLocations = /* @__PURE__ */ new Map(); + const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => { + return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => { + if (packageName === null !== (packageReference === null)) + throw new Error(`Assertion failed: The name and reference should be null, or neither should`); + const discardFromLookup = packageInformationData.discardFromLookup ?? false; + const packageLocator = { name: packageName, reference: packageReference }; + const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation); + if (!entry) { + packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup }); + } else { + entry.discardFromLookup = entry.discardFromLookup && discardFromLookup; + if (!discardFromLookup) { + entry.locator = packageLocator; + } + } + let resolvedPackageLocation = null; + return [packageReference, { + packageDependencies: new Map(packageInformationData.packageDependencies), + packagePeers: new Set(packageInformationData.packagePeers), + linkType: packageInformationData.linkType, + discardFromLookup, + // we only need this for packages that are used by the currently running script + // this is a lazy getter because `ppath.join` has some overhead + get packageLocation() { + return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation)); + } + }]; + }))]; + })); + const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => { + return [packageName, new Set(packageReferences)]; + })); + const fallbackPool = new Map(data.fallbackPool); + const dependencyTreeRoots = data.dependencyTreeRoots; + const enableTopLevelFallback = data.enableTopLevelFallback; + return { + basePath: portablePath, + dependencyTreeRoots, + enableTopLevelFallback, + fallbackExclusionList, + pnpZipBackend: data.pnpZipBackend, + fallbackPool, + ignorePattern, + packageLocatorsByLocations, + packageRegistry + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert__default.default(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); +const ERR_PACKAGE_PATH_NOT_EXPORTED = createErrorType( + "ERR_PACKAGE_PATH_NOT_EXPORTED", + (pkgPath, subpath, base = void 0) => { + if (subpath === ".") + return `No "exports" main defined in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + return `Package subpath '${subpath}' is not defined by "exports" in ${pkgPath}package.json${base ? ` imported from ${base}` : ""}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + url.fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = url.fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)), + url.fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && url.fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && url.fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) return -1; + if (baseLenB > baseLenA) return 1; + if (aPatternIndex === -1) return 1; + if (bPatternIndex === -1) return -1; + if (a.length > b.length) return -1; + if (b.length > a.length) return 1; + return 0; +} +function isConditionalExportsMainSugar(exports, packageJSONUrl, base) { + if (typeof exports === "string" || ArrayIsArray(exports)) return true; + if (typeof exports !== "object" || exports === null) return false; + const keys = ObjectGetOwnPropertyNames(exports); + let isConditionalSugar = false; + let i = 0; + for (let j = 0; j < keys.length; j++) { + const key = keys[j]; + const curIsConditionalSugar = key === "" || key[0] !== "."; + if (i++ === 0) { + isConditionalSugar = curIsConditionalSugar; + } else if (isConditionalSugar !== curIsConditionalSugar) { + throw new ERR_INVALID_PACKAGE_CONFIG( + url.fileURLToPath(packageJSONUrl), + base, + `"exports" cannot contain some keys starting with '.' and some not. The exports object must either be an object of package subpath keys or an object of main entry condition name keys only.` + ); + } + } + return isConditionalSugar; +} +function throwExportsNotFound(subpath, packageJSONUrl, base) { + throw new ERR_PACKAGE_PATH_NOT_EXPORTED( + url.fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + base && url.fileURLToPath(base) + ); +} +const emittedPackageWarnings = /* @__PURE__ */ new Set(); +function emitTrailingSlashPatternDeprecation(match, pjsonUrl, base) { + const pjsonPath = url.fileURLToPath(pjsonUrl); + if (emittedPackageWarnings.has(pjsonPath + "|" + match)) return; + emittedPackageWarnings.add(pjsonPath + "|" + match); + process.emitWarning( + `Use of deprecated trailing slash pattern mapping "${match}" in the "exports" field module resolution of the package at ${pjsonPath}${base ? ` imported from ${url.fileURLToPath(base)}` : ""}. Mapping specifiers ending in "/" is no longer supported.`, + "DeprecationWarning", + "DEP0155" + ); +} +function packageExportsResolve({ + packageJSONUrl, + packageSubpath, + exports, + base, + conditions +}) { + if (isConditionalExportsMainSugar(exports, packageJSONUrl, base)) + exports = { ".": exports }; + if (ObjectPrototypeHasOwnProperty(exports, packageSubpath) && !StringPrototypeIncludes(packageSubpath, "*") && !StringPrototypeEndsWith(packageSubpath, "/")) { + const target = exports[packageSubpath]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + "", + packageSubpath, + base, + false, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(exports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + packageSubpath, + StringPrototypeSlice(key, 0, patternIndex) + )) { + if (StringPrototypeEndsWith(packageSubpath, "/")) + emitTrailingSlashPatternDeprecation( + packageSubpath, + packageJSONUrl, + base + ); + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (packageSubpath.length >= key.length && StringPrototypeEndsWith(packageSubpath, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + packageSubpath, + patternIndex, + packageSubpath.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = exports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + false, + conditions + ); + if (resolveResult == null) { + throwExportsNotFound(packageSubpath, packageJSONUrl, base); + } + return resolveResult; + } + throwExportsNotFound(packageSubpath, packageJSONUrl, base); +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +const flagSymbol = Symbol('arg flag'); + +class ArgError extends Error { + constructor(msg, code) { + super(msg); + this.name = 'ArgError'; + this.code = code; + + Object.setPrototypeOf(this, ArgError.prototype); + } +} + +function arg( + opts, + { + argv = process.argv.slice(2), + permissive = false, + stopAtPositional = false + } = {} +) { + if (!opts) { + throw new ArgError( + 'argument specification object is required', + 'ARG_CONFIG_NO_SPEC' + ); + } + + const result = { _: [] }; + + const aliases = {}; + const handlers = {}; + + for (const key of Object.keys(opts)) { + if (!key) { + throw new ArgError( + 'argument key cannot be an empty string', + 'ARG_CONFIG_EMPTY_KEY' + ); + } + + if (key[0] !== '-') { + throw new ArgError( + `argument key must start with '-' but found: '${key}'`, + 'ARG_CONFIG_NONOPT_KEY' + ); + } + + if (key.length === 1) { + throw new ArgError( + `argument key must have a name; singular '-' keys are not allowed: ${key}`, + 'ARG_CONFIG_NONAME_KEY' + ); + } + + if (typeof opts[key] === 'string') { + aliases[key] = opts[key]; + continue; + } + + let type = opts[key]; + let isFlag = false; + + if ( + Array.isArray(type) && + type.length === 1 && + typeof type[0] === 'function' + ) { + const [fn] = type; + type = (value, name, prev = []) => { + prev.push(fn(value, name, prev[prev.length - 1])); + return prev; + }; + isFlag = fn === Boolean || fn[flagSymbol] === true; + } else if (typeof type === 'function') { + isFlag = type === Boolean || type[flagSymbol] === true; + } else { + throw new ArgError( + `type missing or not a function or valid array type: ${key}`, + 'ARG_CONFIG_VAD_TYPE' + ); + } + + if (key[1] !== '-' && key.length > 2) { + throw new ArgError( + `short argument keys (with a single hyphen) must have only one character: ${key}`, + 'ARG_CONFIG_SHORTOPT_TOOLONG' + ); + } + + handlers[key] = [type, isFlag]; + } + + for (let i = 0, len = argv.length; i < len; i++) { + const wholeArg = argv[i]; + + if (stopAtPositional && result._.length > 0) { + result._ = result._.concat(argv.slice(i)); + break; + } + + if (wholeArg === '--') { + result._ = result._.concat(argv.slice(i + 1)); + break; + } + + if (wholeArg.length > 1 && wholeArg[0] === '-') { + /* eslint-disable operator-linebreak */ + const separatedArguments = + wholeArg[1] === '-' || wholeArg.length === 2 + ? [wholeArg] + : wholeArg + .slice(1) + .split('') + .map((a) => `-${a}`); + /* eslint-enable operator-linebreak */ + + for (let j = 0; j < separatedArguments.length; j++) { + const arg = separatedArguments[j]; + const [originalArgName, argStr] = + arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined]; + + let argName = originalArgName; + while (argName in aliases) { + argName = aliases[argName]; + } + + if (!(argName in handlers)) { + if (permissive) { + result._.push(arg); + continue; + } else { + throw new ArgError( + `unknown or unexpected option: ${originalArgName}`, + 'ARG_UNKNOWN_OPTION' + ); + } + } + + const [type, isFlag] = handlers[argName]; + + if (!isFlag && j + 1 < separatedArguments.length) { + throw new ArgError( + `option requires argument (but was followed by another short argument): ${originalArgName}`, + 'ARG_MISSING_REQUIRED_SHORTARG' + ); + } + + if (isFlag) { + result[argName] = type(true, argName, result[argName]); + } else if (argStr === undefined) { + if ( + argv.length < i + 2 || + (argv[i + 1].length > 1 && + argv[i + 1][0] === '-' && + !( + argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) && + (type === Number || + // eslint-disable-next-line no-undef + (typeof BigInt !== 'undefined' && type === BigInt)) + )) + ) { + const extended = + originalArgName === argName ? '' : ` (alias for ${argName})`; + throw new ArgError( + `option requires argument: ${originalArgName}${extended}`, + 'ARG_MISSING_REQUIRED_LONGARG' + ); + } + + result[argName] = type(argv[i + 1], argName, result[argName]); + ++i; + } else { + result[argName] = type(argStr, argName, result[argName]); + } + } + } else { + result._.push(wholeArg); + } + } + + return result; +} + +arg.flag = (fn) => { + fn[flagSymbol] = true; + return fn; +}; + +// Utility types +arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1); + +// Expose error class +arg.ArgError = ArgError; + +var arg_1 = arg; + +/** + @license + The MIT License (MIT) + + Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + + 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. +*/ +function getOptionValue(opt) { + parseOptions(); + return options[opt]; +} +let options; +function parseOptions() { + if (!options) { + options = { + "--conditions": [], + ...parseArgv(getNodeOptionsEnvArgv()), + ...parseArgv(process.execArgv) + }; + } +} +function parseArgv(argv) { + return arg_1( + { + "--conditions": [String], + "-C": "--conditions" + }, + { + argv, + permissive: true + } + ); +} +function getNodeOptionsEnvArgv() { + const errors = []; + const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors); + if (errors.length !== 0) ; + return envArgv; +} +function ParseNodeOptionsEnvVar(node_options, errors) { + const env_argv = []; + let is_in_string = false; + let will_start_new_arg = true; + for (let index = 0; index < node_options.length; ++index) { + let c = node_options[index]; + if (c === "\\" && is_in_string) { + if (index + 1 === node_options.length) { + errors.push("invalid value for NODE_OPTIONS (invalid escape)\n"); + return env_argv; + } else { + c = node_options[++index]; + } + } else if (c === " " && !is_in_string) { + will_start_new_arg = true; + continue; + } else if (c === '"') { + is_in_string = !is_in_string; + continue; + } + if (will_start_new_arg) { + env_argv.push(c); + will_start_new_arg = false; + } else { + env_argv[env_argv.length - 1] += c; + } + } + if (is_in_string) { + errors.push("invalid value for NODE_OPTIONS (unterminated string)\n"); + } + return env_argv; +} + +function makeApi(runtimeState, opts) { + const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0; + const debugLevel = Number(process.env.PNP_DEBUG_LEVEL); + const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; + const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/; + const isDirRegExp = /\/$/; + const isRelativeRegexp = /^\.{0,2}\//; + const topLevelLocator = { name: null, reference: null }; + const fallbackLocators = []; + const emittedWarnings = /* @__PURE__ */ new Set(); + if (runtimeState.enableTopLevelFallback === true) + fallbackLocators.push(topLevelLocator); + if (opts.compatibilityMode !== false) { + for (const name of [`react-scripts`, `gatsby`]) { + const packageStore = runtimeState.packageRegistry.get(name); + if (packageStore) { + for (const reference of packageStore.keys()) { + if (reference === null) { + throw new Error(`Assertion failed: This reference shouldn't be null`); + } else { + fallbackLocators.push({ name, reference }); + } + } + } + } + } + const { + ignorePattern, + packageRegistry, + packageLocatorsByLocations + } = runtimeState; + function makeLogEntry(name, args) { + return { + fn: name, + args, + error: null, + result: null + }; + } + function trace(entry) { + const colors = process.stderr?.hasColors?.() ?? process.stdout.isTTY; + const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`; + const error = entry.error; + if (error) + console.error(c(`31;1`, `\u2716 ${entry.error?.message.replace(/\n.*/s, ``)}`)); + else + console.error(c(`33;1`, `\u203C Resolution`)); + if (entry.args.length > 0) + console.error(); + for (const arg of entry.args) + console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`); + if (entry.result) { + console.error(); + console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`); + } + const stack = new Error().stack.match(/(?<=^ +)at.*/gm)?.slice(2) ?? []; + if (stack.length > 0) { + console.error(); + for (const line of stack) { + console.error(` ${c(`38;5;244`, line)}`); + } + } + console.error(); + } + function maybeLog(name, fn) { + if (opts.allowDebug === false) + return fn; + if (Number.isFinite(debugLevel)) { + if (debugLevel >= 2) { + return (...args) => { + const logEntry = makeLogEntry(name, args); + try { + return logEntry.result = fn(...args); + } catch (error) { + throw logEntry.error = error; + } finally { + trace(logEntry); + } + }; + } else if (debugLevel >= 1) { + return (...args) => { + try { + return fn(...args); + } catch (error) { + const logEntry = makeLogEntry(name, args); + logEntry.error = error; + trace(logEntry); + throw error; + } + }; + } + } + return fn; + } + function getPackageInformationSafe(packageLocator) { + const packageInformation = getPackageInformation(packageLocator); + if (!packageInformation) { + throw makeError( + ErrorCode.INTERNAL, + `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)` + ); + } + return packageInformation; + } + function isDependencyTreeRoot(packageLocator) { + if (packageLocator.name === null) + return true; + for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots) + if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference) + return true; + return false; + } + const defaultExportsConditions = /* @__PURE__ */ new Set([ + `node`, + `require`, + ...getOptionValue(`--conditions`) + ]); + function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions, issuer) { + const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), { + resolveIgnored: true, + includeDiscardFromLookup: true + }); + if (locator === null) { + throw makeError( + ErrorCode.INTERNAL, + `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)` + ); + } + const { packageLocation } = getPackageInformationSafe(locator); + const manifestPath = ppath.join(packageLocation, Filename.manifest); + if (!opts.fakeFs.existsSync(manifestPath)) + return null; + const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`)); + if (pkgJson.exports == null) + return null; + let subpath = ppath.contains(packageLocation, unqualifiedPath); + if (subpath === null) { + throw makeError( + ErrorCode.INTERNAL, + `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)` + ); + } + if (subpath !== `.` && !isRelativeRegexp.test(subpath)) + subpath = `./${subpath}`; + try { + const resolvedExport = packageExportsResolve({ + packageJSONUrl: url.pathToFileURL(npath.fromPortablePath(manifestPath)), + packageSubpath: subpath, + exports: pkgJson.exports, + base: issuer ? url.pathToFileURL(npath.fromPortablePath(issuer)) : null, + conditions + }); + return npath.toPortablePath(url.fileURLToPath(resolvedExport)); + } catch (error) { + throw makeError( + ErrorCode.EXPORTS_RESOLUTION_FAILED, + error.message, + { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions }, + error.code + ); + } + } + function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) { + let stat; + try { + candidates.push(unqualifiedPath); + stat = opts.fakeFs.statSync(unqualifiedPath); + } catch { + } + if (stat && !stat.isDirectory()) + return opts.fakeFs.realpathSync(unqualifiedPath); + if (stat && stat.isDirectory()) { + let pkgJson; + try { + pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`)); + } catch { + } + let nextUnqualifiedPath; + if (pkgJson && pkgJson.main) + nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main); + if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { + const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions }); + if (resolution !== null) { + return resolution; + } + } + } + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = `${unqualifiedPath}${extensions[i]}`; + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + if (stat && stat.isDirectory()) { + for (let i = 0, length = extensions.length; i < length; i++) { + const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] }); + candidates.push(candidateFile); + if (opts.fakeFs.existsSync(candidateFile)) { + return candidateFile; + } + } + } + return null; + } + function makeFakeModule(path) { + const fakeModule = new require$$0.Module(path, null); + fakeModule.filename = path; + fakeModule.paths = require$$0.Module._nodeModulePaths(path); + return fakeModule; + } + function callNativeResolution(request, issuer) { + if (issuer.endsWith(`/`)) + issuer = ppath.join(issuer, `internal.js`); + return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false }); + } + function isPathIgnored(path) { + if (ignorePattern === null) + return false; + const subPath = ppath.contains(runtimeState.basePath, path); + if (subPath === null) + return false; + if (ignorePattern.test(subPath.replace(/\/$/, ``))) { + return true; + } else { + return false; + } + } + const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 }; + const topLevel = topLevelLocator; + function getPackageInformation({ name, reference }) { + const packageInformationStore = packageRegistry.get(name); + if (!packageInformationStore) + return null; + const packageInformation = packageInformationStore.get(reference); + if (!packageInformation) + return null; + return packageInformation; + } + function findPackageDependents({ name, reference }) { + const dependents = []; + for (const [dependentName, packageInformationStore] of packageRegistry) { + if (dependentName === null) + continue; + for (const [dependentReference, packageInformation] of packageInformationStore) { + if (dependentReference === null) + continue; + const dependencyReference = packageInformation.packageDependencies.get(name); + if (dependencyReference !== reference) + continue; + if (dependentName === name && dependentReference === reference) + continue; + dependents.push({ + name: dependentName, + reference: dependentReference + }); + } + } + return dependents; + } + function findBrokenPeerDependencies(dependency, initialPackage) { + const brokenPackages = /* @__PURE__ */ new Map(); + const alreadyVisited = /* @__PURE__ */ new Set(); + const traversal = (currentPackage) => { + const identifier = JSON.stringify(currentPackage.name); + if (alreadyVisited.has(identifier)) + return; + alreadyVisited.add(identifier); + const dependents = findPackageDependents(currentPackage); + for (const dependent of dependents) { + const dependentInformation = getPackageInformationSafe(dependent); + if (dependentInformation.packagePeers.has(dependency)) { + traversal(dependent); + } else { + let brokenSet = brokenPackages.get(dependent.name); + if (typeof brokenSet === `undefined`) + brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set()); + brokenSet.add(dependent.reference); + } + } + }; + traversal(initialPackage); + const brokenList = []; + for (const name of [...brokenPackages.keys()].sort()) + for (const reference of [...brokenPackages.get(name)].sort()) + brokenList.push({ name, reference }); + return brokenList; + } + function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) { + if (isPathIgnored(location) && !resolveIgnored) + return null; + let relativeLocation = ppath.relative(runtimeState.basePath, location); + if (!relativeLocation.match(isStrictRegExp)) + relativeLocation = `./${relativeLocation}`; + if (!relativeLocation.endsWith(`/`)) + relativeLocation = `${relativeLocation}/`; + do { + const entry = packageLocatorsByLocations.get(relativeLocation); + if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) { + relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1); + continue; + } + return entry.locator; + } while (relativeLocation !== ``); + return null; + } + function tryReadFile(filePath) { + try { + return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } + } + function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) { + if (request.startsWith(`#`)) + throw new Error(`resolveToUnqualified can not handle private import mappings`); + if (request === `pnpapi`) + return npath.toPortablePath(opts.pnpapiResolution); + if (considerBuiltins && require$$0.isBuiltin(request)) + return null; + const requestForDisplay = getPathForDisplay(request); + const issuerForDisplay = issuer && getPathForDisplay(issuer); + if (issuer && isPathIgnored(issuer)) { + if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp) + +Require request: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + } + let unqualifiedPath; + const dependencyNameMatch = request.match(pathRegExp); + if (!dependencyNameMatch) { + if (ppath.isAbsolute(request)) { + unqualifiedPath = ppath.normalize(request); + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const absoluteIssuer = ppath.resolve(issuer); + if (issuer.match(isDirRegExp)) { + unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request)); + } else { + unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request)); + } + } + } else { + if (!issuer) { + throw makeError( + ErrorCode.API_ERROR, + `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + const [, dependencyName, subPath] = dependencyNameMatch; + const issuerLocator = findPackageLocator(issuer); + if (!issuerLocator) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw makeError( + ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED, + `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree). + +Require path: "${requestForDisplay}" +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay } + ); + } + return npath.toPortablePath(result); + } + const issuerInformation = getPackageInformationSafe(issuerLocator); + let dependencyReference = issuerInformation.packageDependencies.get(dependencyName); + let fallbackReference = null; + if (dependencyReference == null) { + if (issuerLocator.name !== null) { + const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name); + const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference); + if (canUseFallbacks) { + for (let t = 0, T = fallbackLocators.length; t < T; ++t) { + const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]); + const reference = fallbackInformation.packageDependencies.get(dependencyName); + if (reference == null) + continue; + if (alwaysWarnOnFallback) + fallbackReference = reference; + else + dependencyReference = reference; + break; + } + if (runtimeState.enableTopLevelFallback) { + if (dependencyReference == null && fallbackReference === null) { + const reference = runtimeState.fallbackPool.get(dependencyName); + if (reference != null) { + fallbackReference = reference; + } + } + } + } + } + } + let error = null; + if (dependencyReference === null) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator); + if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } else { + error = makeError( + ErrorCode.MISSING_PEER_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) + +${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference} +`).join(``)} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors } + ); + } + } + } else if (dependencyReference === void 0) { + if (!considerBuiltins && require$$0.isBuiltin(request)) { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } else { + if (isDependencyTreeRoot(issuerLocator)) { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerForDisplay} +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyName } + ); + } else { + error = makeError( + ErrorCode.UNDECLARED_DEPENDENCY, + `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound. + +Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName } + ); + } + } + } + if (dependencyReference == null) { + if (fallbackReference === null || error === null) + throw error || new Error(`Assertion failed: Expected an error to have been set`); + dependencyReference = fallbackReference; + const message = error.message.replace(/\n.*/g, ``); + error.message = message; + if (!emittedWarnings.has(message) && debugLevel !== 0) { + emittedWarnings.add(message); + process.emitWarning(error); + } + } + const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference }; + const dependencyInformation = getPackageInformationSafe(dependencyLocator); + if (!dependencyInformation.packageLocation) { + throw makeError( + ErrorCode.MISSING_DEPENDENCY, + `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod. + +Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``} +Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay}) +`, + { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) } + ); + } + const dependencyLocation = dependencyInformation.packageLocation; + if (subPath) { + unqualifiedPath = ppath.join(dependencyLocation, subPath); + } else { + unqualifiedPath = dependencyLocation; + } + } + return ppath.normalize(unqualifiedPath); + } + function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions, issuer) { + if (isStrictRegExp.test(request)) + return unqualifiedPath; + const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions, issuer); + if (unqualifiedExportPath) { + return ppath.normalize(unqualifiedExportPath); + } else { + return unqualifiedPath; + } + } + function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) { + const candidates = []; + const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }); + if (qualifiedPath) { + return ppath.normalize(qualifiedPath); + } else { + reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate))); + const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath); + const containingPackage = findPackageLocator(unqualifiedPath); + if (containingPackage) { + const { packageLocation } = getPackageInformationSafe(containingPackage); + let exists = true; + try { + opts.fakeFs.accessSync(packageLocation); + } catch (err) { + if (err?.code === `ENOENT`) { + exists = false; + } else { + const readableError = (err?.message ?? err ?? `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase()); + throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}). + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, { unqualifiedPath: unqualifiedPathForDisplay, extensions }); + } + } + if (!exists) { + const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`; + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `${errorMessage} + +Missing package: ${containingPackage.name}@${containingPackage.reference} +Expected package location: ${getPathForDisplay(packageLocation)} +`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + throw makeError( + ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, + `Qualified path resolution failed: we looked for the following paths, but none could be accessed. + +Source path: ${unqualifiedPathForDisplay} +${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)} +`).join(``)}`, + { unqualifiedPath: unqualifiedPathForDisplay, extensions } + ); + } + } + function resolvePrivateRequest(request, issuer, opts2) { + if (!issuer) + throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`); + const resolved = packageImportsResolve({ + name: request, + base: url.pathToFileURL(npath.fromPortablePath(issuer)), + conditions: opts2.conditions ?? defaultExportsConditions, + readFileSyncFn: tryReadFile + }); + if (resolved instanceof URL) { + return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions }); + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolveRequest(resolved, issuer, opts2); + } + } + function resolveRequest(request, issuer, opts2 = {}) { + try { + if (request.startsWith(`#`)) + return resolvePrivateRequest(request, issuer, opts2); + const { considerBuiltins, extensions, conditions } = opts2; + const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins }); + if (request === `pnpapi`) + return unqualifiedPath; + if (unqualifiedPath === null) + return null; + const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false; + const remappedPath = (!considerBuiltins || !require$$0.isBuiltin(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions, issuer) : unqualifiedPath; + return resolveUnqualified(remappedPath, { extensions }); + } catch (error) { + if (Object.hasOwn(error, `pnpCode`)) + Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) }); + throw error; + } + } + function resolveVirtual(request) { + const normalized = ppath.normalize(request); + const resolved = VirtualFS.resolveVirtual(normalized); + return resolved !== normalized ? resolved : null; + } + return { + VERSIONS, + topLevel, + getLocator: (name, referencish) => { + if (Array.isArray(referencish)) { + return { name: referencish[0], reference: referencish[1] }; + } else { + return { name, reference: referencish }; + } + }, + getDependencyTreeRoots: () => { + return [...runtimeState.dependencyTreeRoots]; + }, + getAllLocators() { + const locators = []; + for (const [name, entry] of packageRegistry) + for (const reference of entry.keys()) + if (name !== null && reference !== null) + locators.push({ name, reference }); + return locators; + }, + getPackageInformation: (locator) => { + const info = getPackageInformation(locator); + if (info === null) + return null; + const packageLocation = npath.fromPortablePath(info.packageLocation); + const nativeInfo = { ...info, packageLocation }; + return nativeInfo; + }, + findPackageLocator: (path) => { + return findPackageLocator(npath.toPortablePath(path)); + }, + resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => { + return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2)); + }), + resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => { + const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null; + const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2); + if (resolution === null) + return null; + return npath.fromPortablePath(resolution); + }), + resolveVirtual: maybeLog(`resolveVirtual`, (path) => { + const result = resolveVirtual(npath.toPortablePath(path)); + if (result !== null) { + return npath.fromPortablePath(result); + } else { + return null; + } + }) + }; +} + +function makeManager(pnpapi, opts) { + const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null)); + const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath)); + const apiMetadata = /* @__PURE__ */ new Map([ + [initialApiPath, { + instance: pnpapi, + stats: initialApiStats, + lastRefreshCheck: Date.now() + }] + ]); + function loadApiInstance(pnpApiPath) { + const nativePath = npath.fromPortablePath(pnpApiPath); + const module = new require$$0.Module(nativePath, null); + module.load(nativePath); + return module.exports; + } + function refreshApiEntry(pnpApiPath, apiEntry) { + const timeNow = Date.now(); + if (timeNow - apiEntry.lastRefreshCheck < 500) + return; + apiEntry.lastRefreshCheck = timeNow; + const stats = opts.fakeFs.statSync(pnpApiPath); + if (stats.mtime > apiEntry.stats.mtime) { + process.emitWarning(`[Warning] The runtime detected new information in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`); + apiEntry.stats = stats; + apiEntry.instance = loadApiInstance(pnpApiPath); + } + } + function getApiEntry(pnpApiPath, refresh = false) { + let apiEntry = apiMetadata.get(pnpApiPath); + if (typeof apiEntry !== `undefined`) { + if (refresh) { + refreshApiEntry(pnpApiPath, apiEntry); + } + } else { + apiMetadata.set(pnpApiPath, apiEntry = { + instance: loadApiInstance(pnpApiPath), + stats: opts.fakeFs.statSync(pnpApiPath), + lastRefreshCheck: Date.now() + }); + } + return apiEntry; + } + const findApiPathCache = /* @__PURE__ */ new Map(); + function addToCacheAndReturn(start, end, target) { + if (target !== null) { + target = VirtualFS.resolveVirtual(target); + target = opts.fakeFs.realpathSync(target); + } + let curr; + let next = start; + do { + curr = next; + findApiPathCache.set(curr, target); + next = ppath.dirname(curr); + } while (curr !== end); + return target; + } + function findApiPathFor(modulePath) { + let bestCandidate = null; + for (const [apiPath, apiEntry] of apiMetadata) { + const locator = apiEntry.instance.findPackageLocator(modulePath); + if (!locator) + continue; + if (apiMetadata.size === 1) + return apiPath; + const packageInformation = apiEntry.instance.getPackageInformation(locator); + if (!packageInformation) + throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`); + if (!bestCandidate) + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] }; + if (packageInformation.packageLocation === bestCandidate.packageLocation) { + bestCandidate.apiPaths.push(apiPath); + } else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) { + bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] }; + } + } + if (bestCandidate) { + if (bestCandidate.apiPaths.length === 1) + return bestCandidate.apiPaths[0]; + const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(` +`); + throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances. +This is usually caused by using the global cache (enableGlobalCache: true) + +Controlled by: +${controlSegment} +`); + } + const start = ppath.resolve(npath.toPortablePath(modulePath)); + let curr; + let next = start; + do { + curr = next; + const cached = findApiPathCache.get(curr); + if (cached !== void 0) + return addToCacheAndReturn(start, curr, cached); + const cjsCandidate = ppath.join(curr, Filename.pnpCjs); + if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, cjsCandidate); + const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs); + if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile()) + return addToCacheAndReturn(start, curr, legacyCjsCandidate); + next = ppath.dirname(curr); + } while (curr !== PortablePath.root); + return addToCacheAndReturn(start, curr, null); + } + const moduleToApiPathCache = /* @__PURE__ */ new WeakMap(); + function getApiPathFromParent(parent) { + if (parent == null) + return initialApiPath; + let apiPath = moduleToApiPathCache.get(parent); + if (typeof apiPath !== `undefined`) + return apiPath; + apiPath = parent.filename ? findApiPathFor(parent.filename) : null; + moduleToApiPathCache.set(parent, apiPath); + return apiPath; + } + return { + getApiPathFromParent, + findApiPathFor, + getApiEntry + }; +} + +const localFs = { ...fs__default.default }; +const nodeFs = new NodeFS(localFs); +const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); +const defaultPnpapiResolution = __filename; +const customZipImplementation = defaultRuntimeState.pnpZipBackend === `js` ? JsZipImpl : void 0; +const defaultFsLayer = new VirtualFS({ + baseFs: new ZipOpenFS({ + customZipImplementation, + baseFs: nodeFs, + maxOpenFiles: 80, + readOnlyArchives: true + }) +}); +class DynamicFS extends ProxiedFS { + baseFs = defaultFsLayer; + constructor() { + super(ppath); + } + mapToBase(p) { + return p; + } + mapFromBase(p) { + return p; + } +} +const dynamicFsLayer = new DynamicFS(); +let manager; +const defaultApi = Object.assign(makeApi(defaultRuntimeState, { + fakeFs: dynamicFsLayer, + pnpapiResolution: defaultPnpapiResolution +}), { + /** + * Can be used to generate a different API than the default one (for example + * to map it on `/` rather than the local directory path, or to use a + * different FS layer than the default one). + */ + makeApi: ({ + basePath = void 0, + fakeFs = dynamicFsLayer, + pnpapiResolution = defaultPnpapiResolution, + ...rest + }) => { + const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState; + return makeApi(apiRuntimeState, { + fakeFs, + pnpapiResolution, + ...rest + }); + }, + /** + * Will inject the specified API into the environment, monkey-patching FS. Is + * automatically called when the hook is loaded through `--require`. + */ + setup: (api) => { + applyPatch(api || defaultApi, { + fakeFs: defaultFsLayer, + manager + }); + dynamicFsLayer.baseFs = new NodeFS(fs__default.default); + } +}); +manager = makeManager(defaultApi, { + fakeFs: dynamicFsLayer +}); +if (module.parent && module.parent.id === `internal/preload`) { + defaultApi.setup(); + if (module.filename) { + delete require$$0__default.default._cache[module.filename]; + } +} +if (process.mainModule === module) { + const reportError = (code, message, data) => { + process.stdout.write(`${JSON.stringify([{ code, message, data }, null])} +`); + }; + const reportSuccess = (resolution) => { + process.stdout.write(`${JSON.stringify([null, resolution])} +`); + }; + const processResolution = (request, issuer) => { + try { + reportSuccess(defaultApi.resolveRequest(request, issuer)); + } catch (error) { + reportError(error.code, error.message, error.data); + } + }; + const processRequest = (data) => { + try { + const [request, issuer] = JSON.parse(data); + processResolution(request, issuer); + } catch (error) { + reportError(`INVALID_JSON`, error.message, error.data); + } + }; + if (process.argv.length > 2) { + if (process.argv.length !== 4) { + process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} +`); + process.exitCode = 64; + } else { + processResolution(process.argv[2], process.argv[3]); + } + } else { + let buffer = ``; + const decoder = new StringDecoder__default.default.StringDecoder(); + process.stdin.on(`data`, (chunk) => { + buffer += decoder.write(chunk); + do { + const index = buffer.indexOf(` +`); + if (index === -1) + break; + const line = buffer.slice(0, index); + buffer = buffer.slice(index + 1); + processRequest(line); + } while (true); + }); + } +} + +module.exports = defaultApi; diff --git a/subgraph/.pnp.loader.mjs b/subgraph/.pnp.loader.mjs new file mode 100644 index 0000000..9896cc7 --- /dev/null +++ b/subgraph/.pnp.loader.mjs @@ -0,0 +1,2126 @@ +/* eslint-disable */ +// @ts-nocheck + +import fs from 'fs'; +import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url'; +import path from 'path'; +import { createHash } from 'crypto'; +import { EOL } from 'os'; +import esmModule, { createRequire, isBuiltin } from 'module'; +import assert from 'assert'; + +const SAFE_TIME = 456789e3; + +const PortablePath = { + root: `/`, + dot: `.`, + parent: `..` +}; +const npath = Object.create(path); +const ppath = Object.create(path.posix); +npath.cwd = () => process.cwd(); +ppath.cwd = process.platform === `win32` ? () => toPortablePath(process.cwd()) : process.cwd; +if (process.platform === `win32`) { + ppath.resolve = (...segments) => { + if (segments.length > 0 && ppath.isAbsolute(segments[0])) { + return path.posix.resolve(...segments); + } else { + return path.posix.resolve(ppath.cwd(), ...segments); + } + }; +} +const contains = function(pathUtils, from, to) { + from = pathUtils.normalize(from); + to = pathUtils.normalize(to); + if (from === to) + return `.`; + if (!from.endsWith(pathUtils.sep)) + from = from + pathUtils.sep; + if (to.startsWith(from)) { + return to.slice(from.length); + } else { + return null; + } +}; +npath.contains = (from, to) => contains(npath, from, to); +ppath.contains = (from, to) => contains(ppath, from, to); +const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/; +const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/; +const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/; +const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/; +function fromPortablePathWin32(p) { + let portablePathMatch, uncPortablePathMatch; + if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP)) + p = portablePathMatch[1]; + else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP)) + p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`; + else + return p; + return p.replace(/\//g, `\\`); +} +function toPortablePathWin32(p) { + p = p.replace(/\\/g, `/`); + let windowsPathMatch, uncWindowsPathMatch; + if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP)) + p = `/${windowsPathMatch[1]}`; + else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP)) + p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`; + return p; +} +const toPortablePath = process.platform === `win32` ? toPortablePathWin32 : (p) => p; +const fromPortablePath = process.platform === `win32` ? fromPortablePathWin32 : (p) => p; +npath.fromPortablePath = fromPortablePath; +npath.toPortablePath = toPortablePath; +function convertPath(targetPathUtils, sourcePath) { + return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath); +} + +const defaultTime = new Date(SAFE_TIME * 1e3); +const defaultTimeMs = defaultTime.getTime(); +async function copyPromise(destinationFs, destination, sourceFs, source, opts) { + const normalizedDestination = destinationFs.pathUtils.normalize(destination); + const normalizedSource = sourceFs.pathUtils.normalize(source); + const prelayout = []; + const postlayout = []; + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource); + await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] }); + await copyImpl(prelayout, postlayout, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true }); + for (const operation of prelayout) + await operation(); + await Promise.all(postlayout.map((operation) => { + return operation(); + })); +} +async function copyImpl(prelayout, postlayout, destinationFs, destination, sourceFs, source, opts) { + const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null; + const sourceStat = await sourceFs.lstatPromise(source); + const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat; + let updated; + switch (true) { + case sourceStat.isDirectory(): + { + updated = await copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isFile(): + { + updated = await copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + case sourceStat.isSymbolicLink(): + { + updated = await copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } + break; + default: { + throw new Error(`Unsupported file type (${sourceStat.mode})`); + } + } + if (opts.linkStrategy?.type !== `HardlinkFromIndex` || !sourceStat.isFile()) { + if (updated || destinationStat?.mtime?.getTime() !== mtime.getTime() || destinationStat?.atime?.getTime() !== atime.getTime()) { + postlayout.push(() => destinationFs.lutimesPromise(destination, atime, mtime)); + updated = true; + } + if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) { + postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511)); + updated = true; + } + } + return updated; +} +async function maybeLStat(baseFs, p) { + try { + return await baseFs.lstatPromise(p); + } catch { + return null; + } +} +async function copyFolder(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null && !destinationStat.isDirectory()) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + let updated = false; + if (destinationStat === null) { + prelayout.push(async () => { + try { + await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode }); + } catch (err) { + if (err.code !== `EEXIST`) { + throw err; + } + } + }); + updated = true; + } + const entries = await sourceFs.readdirPromise(source); + const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts; + if (opts.stableSort) { + for (const entry of entries.sort()) { + if (await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) { + updated = true; + } + } + } else { + const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => { + await copyImpl(prelayout, postlayout, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts); + })); + if (entriesUpdateStatus.some((status) => status)) { + updated = true; + } + } + return updated; +} +async function copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, linkStrategy) { + const sourceHash = await sourceFs.checksumFilePromise(source, { algorithm: `sha1` }); + const defaultMode = 420; + const sourceMode = sourceStat.mode & 511; + const indexFileName = `${sourceHash}${sourceMode !== defaultMode ? sourceMode.toString(8) : ``}`; + const indexPath = destinationFs.pathUtils.join(linkStrategy.indexPath, sourceHash.slice(0, 2), `${indexFileName}.dat`); + let AtomicBehavior; + ((AtomicBehavior2) => { + AtomicBehavior2[AtomicBehavior2["Lock"] = 0] = "Lock"; + AtomicBehavior2[AtomicBehavior2["Rename"] = 1] = "Rename"; + })(AtomicBehavior || (AtomicBehavior = {})); + let atomicBehavior = 1 /* Rename */; + let indexStat = await maybeLStat(destinationFs, indexPath); + if (destinationStat) { + const isDestinationHardlinkedFromIndex = indexStat && destinationStat.dev === indexStat.dev && destinationStat.ino === indexStat.ino; + const isIndexModified = indexStat?.mtimeMs !== defaultTimeMs; + if (isDestinationHardlinkedFromIndex) { + if (isIndexModified && linkStrategy.autoRepair) { + atomicBehavior = 0 /* Lock */; + indexStat = null; + } + } + if (!isDestinationHardlinkedFromIndex) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + } + const tempPath = !indexStat && atomicBehavior === 1 /* Rename */ ? `${indexPath}.${Math.floor(Math.random() * 4294967296).toString(16).padStart(8, `0`)}` : null; + let tempPathCleaned = false; + prelayout.push(async () => { + if (!indexStat) { + if (atomicBehavior === 0 /* Lock */) { + await destinationFs.lockPromise(indexPath, async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(indexPath, content); + }); + } + if (atomicBehavior === 1 /* Rename */ && tempPath) { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(tempPath, content); + try { + await destinationFs.linkPromise(tempPath, indexPath); + } catch (err) { + if (err.code === `EEXIST`) { + tempPathCleaned = true; + await destinationFs.unlinkPromise(tempPath); + } else { + throw err; + } + } + } + } + if (!destinationStat) { + await destinationFs.linkPromise(indexPath, destination); + } + }); + postlayout.push(async () => { + if (!indexStat) { + await destinationFs.lutimesPromise(indexPath, defaultTime, defaultTime); + if (sourceMode !== defaultMode) { + await destinationFs.chmodPromise(indexPath, sourceMode); + } + } + if (tempPath && !tempPathCleaned) { + await destinationFs.unlinkPromise(tempPath); + } + }); + return false; +} +async function copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + const content = await sourceFs.readFilePromise(source); + await destinationFs.writeFilePromise(destination, content); + }); + return true; +} +async function copyFile(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (opts.linkStrategy?.type === `HardlinkFromIndex`) { + return copyFileViaIndex(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts, opts.linkStrategy); + } else { + return copyFileDirect(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts); + } +} +async function copySymlink(prelayout, postlayout, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) { + if (destinationStat !== null) { + if (opts.overwrite) { + prelayout.push(async () => destinationFs.removePromise(destination)); + destinationStat = null; + } else { + return false; + } + } + prelayout.push(async () => { + await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination); + }); + return true; +} + +class FakeFS { + pathUtils; + constructor(pathUtils) { + this.pathUtils = pathUtils; + } + async *genTraversePromise(init, { stableSort = false } = {}) { + const stack = [init]; + while (stack.length > 0) { + const p = stack.shift(); + const entry = await this.lstatPromise(p); + if (entry.isDirectory()) { + const entries = await this.readdirPromise(p); + if (stableSort) { + for (const entry2 of entries.sort()) { + stack.push(this.pathUtils.join(p, entry2)); + } + } else { + throw new Error(`Not supported`); + } + } else { + yield p; + } + } + } + async checksumFilePromise(path, { algorithm = `sha512` } = {}) { + const fd = await this.openPromise(path, `r`); + try { + const CHUNK_SIZE = 65536; + const chunk = Buffer.allocUnsafeSlow(CHUNK_SIZE); + const hash = createHash(algorithm); + let bytesRead = 0; + while ((bytesRead = await this.readPromise(fd, chunk, 0, CHUNK_SIZE)) !== 0) + hash.update(bytesRead === CHUNK_SIZE ? chunk : chunk.slice(0, bytesRead)); + return hash.digest(`hex`); + } finally { + await this.closePromise(fd); + } + } + async removePromise(p, { recursive = true, maxRetries = 5 } = {}) { + let stat; + try { + stat = await this.lstatPromise(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) { + const entries = await this.readdirPromise(p); + await Promise.all(entries.map((entry) => { + return this.removePromise(this.pathUtils.resolve(p, entry)); + })); + } + for (let t = 0; t <= maxRetries; t++) { + try { + await this.rmdirPromise(p); + break; + } catch (error) { + if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) { + throw error; + } else if (t < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, t * 100)); + } + } + } + } else { + await this.unlinkPromise(p); + } + } + removeSync(p, { recursive = true } = {}) { + let stat; + try { + stat = this.lstatSync(p); + } catch (error) { + if (error.code === `ENOENT`) { + return; + } else { + throw error; + } + } + if (stat.isDirectory()) { + if (recursive) + for (const entry of this.readdirSync(p)) + this.removeSync(this.pathUtils.resolve(p, entry)); + this.rmdirSync(p); + } else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } else { + const parentStat = await this.statPromise(this.pathUtils.dirname(subPath)); + await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === this.pathUtils.dirname(p)) + return void 0; + const parts = p.split(this.pathUtils.sep); + let createdDirectory; + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(this.pathUtils.sep); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } catch (error) { + if (error.code === `EEXIST`) { + continue; + } else { + throw error; + } + } + createdDirectory ??= subPath; + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } else { + const parentStat = this.statSync(this.pathUtils.dirname(subPath)); + this.utimesSync(subPath, parentStat.atime, parentStat.mtime); + } + } + } + return createdDirectory; + } + async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) { + return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy }); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite }); + } + } else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(convertPath(this.pathUtils, target), destination); + } + } else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 511; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferPromise(p, content, opts); + } else { + return this.changeFileTextPromise(p, content, opts); + } + } + async changeFileBufferPromise(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = await this.readFilePromise(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + await this.writeFilePromise(p, content, { mode }); + } + async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) { + let current = ``; + try { + current = await this.readFilePromise(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + await this.writeFilePromise(p, normalizedContent, { mode }); + } + changeFileSync(p, content, opts = {}) { + if (Buffer.isBuffer(content)) { + return this.changeFileBufferSync(p, content, opts); + } else { + return this.changeFileTextSync(p, content, opts); + } + } + changeFileBufferSync(p, content, { mode } = {}) { + let current = Buffer.alloc(0); + try { + current = this.readFileSync(p); + } catch { + } + if (Buffer.compare(current, content) === 0) + return; + this.writeFileSync(p, content, { mode }); + } + changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) { + let current = ``; + try { + current = this.readFileSync(p, `utf8`); + } catch { + } + const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content; + if (current === normalizedContent) + return; + this.writeFileSync(p, normalizedContent, { mode }); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.flock`; + const interval = 1e3 / 60; + const startTime = Date.now(); + let fd = null; + const isAlive = async () => { + let pid; + try { + [pid] = await this.readJsonPromise(lockPath); + } catch { + return Date.now() - startTime < 500; + } + try { + process.kill(pid, 0); + return true; + } catch { + return false; + } + }; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } catch (error) { + if (error.code === `EEXIST`) { + if (!await isAlive()) { + try { + await this.unlinkPromise(lockPath); + continue; + } catch { + } + } + if (Date.now() - startTime < 60 * 1e3) { + await new Promise((resolve) => setTimeout(resolve, interval)); + } else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } else { + throw error; + } + } + } + await this.writePromise(fd, JSON.stringify([process.pid])); + try { + return await callback(); + } finally { + try { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } catch { + } + } + } + async readJsonPromise(p) { + const content = await this.readFilePromise(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + readJsonSync(p) { + const content = this.readFileSync(p, `utf8`); + try { + return JSON.parse(content); + } catch (error) { + error.message += ` (in ${p})`; + throw error; + } + } + async writeJsonPromise(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return await this.writeFilePromise(p, `${JSON.stringify(data, null, space)} +`); + } + writeJsonSync(p, data, { compact = false } = {}) { + const space = compact ? 0 : 2; + return this.writeFileSync(p, `${JSON.stringify(data, null, space)} +`); + } + async preserveTimePromise(p, cb) { + const stat = await this.lstatPromise(p); + const result = await cb(); + if (typeof result !== `undefined`) + p = result; + await this.lutimesPromise(p, stat.atime, stat.mtime); + } + async preserveTimeSync(p, cb) { + const stat = this.lstatSync(p); + const result = cb(); + if (typeof result !== `undefined`) + p = result; + this.lutimesSync(p, stat.atime, stat.mtime); + } +} +class BasePortableFakeFS extends FakeFS { + constructor() { + super(ppath); + } +} +function getEndOfLine(content) { + const matches = content.match(/\r?\n/g); + if (matches === null) + return EOL; + const crlf = matches.filter((nl) => nl === `\r +`).length; + const lf = matches.length - crlf; + return crlf > lf ? `\r +` : ` +`; +} +function normalizeLineEndings(originalContent, newContent) { + return newContent.replace(/\r?\n/g, getEndOfLine(originalContent)); +} + +class ProxiedFS extends FakeFS { + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + resolve(path) { + return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path))); + } + getRealPath() { + return this.mapFromBase(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return this.baseFs.openPromise(this.mapToBase(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.mapToBase(p), flags, mode); + } + async opendirPromise(p, opts) { + return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p }); + } + opendirSync(p, opts) { + return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p }); + } + async readPromise(fd, buffer, offset, length, position) { + return await this.baseFs.readPromise(fd, buffer, offset, length, position); + } + readSync(fd, buffer, offset, length, position) { + return this.baseFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return await this.baseFs.writePromise(fd, buffer, offset); + } else { + return await this.baseFs.writePromise(fd, buffer, offset, length, position); + } + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.baseFs.writeSync(fd, buffer, offset); + } else { + return this.baseFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + return this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts); + } + async realpathPromise(p) { + return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p))); + } + realpathSync(p) { + return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p))); + } + async existsPromise(p) { + return this.baseFs.existsPromise(this.mapToBase(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.mapToBase(p)); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.mapToBase(p), mode); + } + async accessPromise(p, mode) { + return this.baseFs.accessPromise(this.mapToBase(p), mode); + } + async statPromise(p, opts) { + return this.baseFs.statPromise(this.mapToBase(p), opts); + } + statSync(p, opts) { + return this.baseFs.statSync(this.mapToBase(p), opts); + } + async fstatPromise(fd, opts) { + return this.baseFs.fstatPromise(fd, opts); + } + fstatSync(fd, opts) { + return this.baseFs.fstatSync(fd, opts); + } + lstatPromise(p, opts) { + return this.baseFs.lstatPromise(this.mapToBase(p), opts); + } + lstatSync(p, opts) { + return this.baseFs.lstatSync(this.mapToBase(p), opts); + } + async fchmodPromise(fd, mask) { + return this.baseFs.fchmodPromise(fd, mask); + } + fchmodSync(fd, mask) { + return this.baseFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return this.baseFs.chmodPromise(this.mapToBase(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.mapToBase(p), mask); + } + async fchownPromise(fd, uid, gid) { + return this.baseFs.fchownPromise(fd, uid, gid); + } + fchownSync(fd, uid, gid) { + return this.baseFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return this.baseFs.chownPromise(this.mapToBase(p), uid, gid); + } + chownSync(p, uid, gid) { + return this.baseFs.chownSync(this.mapToBase(p), uid, gid); + } + async renamePromise(oldP, newP) { + return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags); + } + async appendFilePromise(p, content, opts) { + return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts); + } + appendFileSync(p, content, opts) { + return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts); + } + async writeFilePromise(p, content, opts) { + return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts); + } + async unlinkPromise(p) { + return this.baseFs.unlinkPromise(this.mapToBase(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.mapToBase(p)); + } + async utimesPromise(p, atime, mtime) { + return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.baseFs.lutimesPromise(this.mapToBase(p), atime, mtime); + } + lutimesSync(p, atime, mtime) { + return this.baseFs.lutimesSync(this.mapToBase(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return this.baseFs.mkdirPromise(this.mapToBase(p), opts); + } + mkdirSync(p, opts) { + return this.baseFs.mkdirSync(this.mapToBase(p), opts); + } + async rmdirPromise(p, opts) { + return this.baseFs.rmdirPromise(this.mapToBase(p), opts); + } + rmdirSync(p, opts) { + return this.baseFs.rmdirSync(this.mapToBase(p), opts); + } + async rmPromise(p, opts) { + return this.baseFs.rmPromise(this.mapToBase(p), opts); + } + rmSync(p, opts) { + return this.baseFs.rmSync(this.mapToBase(p), opts); + } + async linkPromise(existingP, newP) { + return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP)); + } + linkSync(existingP, newP) { + return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP)); + } + async symlinkPromise(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkPromise(mappedTarget, mappedP, type); + } + symlinkSync(target, p, type) { + const mappedP = this.mapToBase(p); + if (this.pathUtils.isAbsolute(target)) + return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type); + const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target)); + const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget); + return this.baseFs.symlinkSync(mappedTarget, mappedP, type); + } + async readFilePromise(p, encoding) { + return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding); + } + readFileSync(p, encoding) { + return this.baseFs.readFileSync(this.fsMapToBase(p), encoding); + } + readdirPromise(p, opts) { + return this.baseFs.readdirPromise(this.mapToBase(p), opts); + } + readdirSync(p, opts) { + return this.baseFs.readdirSync(this.mapToBase(p), opts); + } + async readlinkPromise(p) { + return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p))); + } + readlinkSync(p) { + return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p))); + } + async truncatePromise(p, len) { + return this.baseFs.truncatePromise(this.mapToBase(p), len); + } + truncateSync(p, len) { + return this.baseFs.truncateSync(this.mapToBase(p), len); + } + async ftruncatePromise(fd, len) { + return this.baseFs.ftruncatePromise(fd, len); + } + ftruncateSync(fd, len) { + return this.baseFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.baseFs.watch( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.baseFs.watchFile( + this.mapToBase(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.baseFs.unwatchFile(this.mapToBase(p), cb); + } + fsMapToBase(p) { + if (typeof p === `number`) { + return p; + } else { + return this.mapToBase(p); + } + } +} + +function direntToPortable(dirent) { + const portableDirent = dirent; + if (typeof dirent.path === `string`) + portableDirent.path = npath.toPortablePath(dirent.path); + return portableDirent; +} +class NodeFS extends BasePortableFakeFS { + realFs; + constructor(realFs = fs) { + super(); + this.realFs = realFs; + } + getExtractHint() { + return false; + } + getRealPath() { + return PortablePath.root; + } + resolve(p) { + return ppath.resolve(p); + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(npath.fromPortablePath(p), flags, mode); + } + async opendirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (typeof opts !== `undefined`) { + this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }).then((dir) => { + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + }); + } + opendirSync(p, opts) { + const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p)); + const dirWithFixedPath = dir; + Object.defineProperty(dirWithFixedPath, `path`, { + value: p, + configurable: true, + writable: true + }); + return dirWithFixedPath; + } + async readPromise(fd, buffer, offset = 0, length = 0, position = -1) { + return await new Promise((resolve, reject) => { + this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => { + if (error) { + reject(error); + } else { + resolve(bytesRead); + } + }); + }); + } + readSync(fd, buffer, offset, length, position) { + return this.realFs.readSync(fd, buffer, offset, length, position); + } + async writePromise(fd, buffer, offset, length, position) { + return await new Promise((resolve, reject) => { + if (typeof buffer === `string`) { + return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject)); + } else { + return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject)); + } + }); + } + writeSync(fd, buffer, offset, length, position) { + if (typeof buffer === `string`) { + return this.realFs.writeSync(fd, buffer, offset); + } else { + return this.realFs.writeSync(fd, buffer, offset, length, position); + } + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createReadStream(realPath, opts); + } + createWriteStream(p, opts) { + const realPath = p !== null ? npath.fromPortablePath(p) : p; + return this.realFs.createWriteStream(realPath, opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + realpathSync(p) { + return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise((resolve) => { + this.realFs.exists(npath.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(npath.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(npath.fromPortablePath(p)); + } + async statPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + statSync(p, opts) { + if (opts) { + return this.realFs.statSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.statSync(npath.fromPortablePath(p)); + } + } + async fstatPromise(fd, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.fstat(fd, this.makeCallback(resolve, reject)); + } + }); + } + fstatSync(fd, opts) { + if (opts) { + return this.realFs.fstatSync(fd, opts); + } else { + return this.realFs.fstatSync(fd); + } + } + async lstatPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + lstatSync(p, opts) { + if (opts) { + return this.realFs.lstatSync(npath.fromPortablePath(p), opts); + } else { + return this.realFs.lstatSync(npath.fromPortablePath(p)); + } + } + async fchmodPromise(fd, mask) { + return await new Promise((resolve, reject) => { + this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject)); + }); + } + fchmodSync(fd, mask) { + return this.realFs.fchmodSync(fd, mask); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(npath.fromPortablePath(p), mask); + } + async fchownPromise(fd, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject)); + }); + } + fchownSync(fd, uid, gid) { + return this.realFs.fchownSync(fd, uid, gid); + } + async chownPromise(p, uid, gid) { + return await new Promise((resolve, reject) => { + this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject)); + }); + } + chownSync(p, uid, gid) { + return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags); + } + async appendFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + appendFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.appendFileSync(fsNativePath, content, opts); + } else { + this.realFs.appendFileSync(fsNativePath, content); + } + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + if (opts) { + this.realFs.writeFileSync(fsNativePath, content, opts); + } else { + this.realFs.writeFileSync(fsNativePath, content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(npath.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime); + } + async lutimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.lutimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + lutimesSync(p, atime, mtime) { + this.realFs.lutimesSync(npath.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p, opts) { + return this.realFs.mkdirSync(npath.fromPortablePath(p), opts); + } + async rmdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmdirSync(p, opts) { + return this.realFs.rmdirSync(npath.fromPortablePath(p), opts); + } + async rmPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.rm(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } else { + this.realFs.rm(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + rmSync(p, opts) { + return this.realFs.rmSync(npath.fromPortablePath(p), opts); + } + async linkPromise(existingP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + linkSync(existingP, newP) { + return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP)); + } + async symlinkPromise(target, p, type) { + return await new Promise((resolve, reject) => { + this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p, type) { + return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p; + return this.realFs.readFileSync(fsNativePath, encoding); + } + async readdirPromise(p, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(direntToPortable)), reject)); + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback((results) => resolve(results.map(npath.toPortablePath)), reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject)); + } + } else { + this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + } + }); + } + readdirSync(p, opts) { + if (opts) { + if (opts.recursive && process.platform === `win32`) { + if (opts.withFileTypes) { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(direntToPortable); + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts).map(npath.toPortablePath); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p), opts); + } + } else { + return this.realFs.readdirSync(npath.fromPortablePath(p)); + } + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then((path) => { + return npath.toPortablePath(path); + }); + } + readlinkSync(p) { + return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p))); + } + async truncatePromise(p, len) { + return await new Promise((resolve, reject) => { + this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject)); + }); + } + truncateSync(p, len) { + return this.realFs.truncateSync(npath.fromPortablePath(p), len); + } + async ftruncatePromise(fd, len) { + return await new Promise((resolve, reject) => { + this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject)); + }); + } + ftruncateSync(fd, len) { + return this.realFs.ftruncateSync(fd, len); + } + watch(p, a, b) { + return this.realFs.watch( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + watchFile(p, a, b) { + return this.realFs.watchFile( + npath.fromPortablePath(p), + // @ts-expect-error - reason TBS + a, + b + ); + } + unwatchFile(p, cb) { + return this.realFs.unwatchFile(npath.fromPortablePath(p), cb); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } else { + resolve(result); + } + }; + } +} + +const NUMBER_REGEXP = /^[0-9]+$/; +const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/; +const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/; +class VirtualFS extends ProxiedFS { + baseFs; + static makeVirtualPath(base, component, to) { + if (ppath.basename(base) !== `__virtual__`) + throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`); + if (!ppath.basename(component).match(VALID_COMPONENT)) + throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`); + const target = ppath.relative(ppath.dirname(base), to); + const segments = target.split(`/`); + let depth = 0; + while (depth < segments.length && segments[depth] === `..`) + depth += 1; + const finalSegments = segments.slice(depth); + const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments); + return fullVirtualPath; + } + static resolveVirtual(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match || !match[3] && match[5]) + return p; + const target = ppath.dirname(match[1]); + if (!match[3] || !match[4]) + return target; + const isnum = NUMBER_REGEXP.test(match[4]); + if (!isnum) + return p; + const depth = Number(match[4]); + const backstep = `../`.repeat(depth); + const subpath = match[5] || `.`; + return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath)); + } + constructor({ baseFs = new NodeFS() } = {}) { + super(ppath); + this.baseFs = baseFs; + } + getExtractHint(hints) { + return this.baseFs.getExtractHint(hints); + } + getRealPath() { + return this.baseFs.getRealPath(); + } + realpathSync(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return this.baseFs.realpathSync(p); + if (!match[5]) + return p; + const realpath = this.baseFs.realpathSync(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + async realpathPromise(p) { + const match = p.match(VIRTUAL_REGEXP); + if (!match) + return await this.baseFs.realpathPromise(p); + if (!match[5]) + return p; + const realpath = await this.baseFs.realpathPromise(this.mapToBase(p)); + return VirtualFS.makeVirtualPath(match[1], match[3], realpath); + } + mapToBase(p) { + if (p === ``) + return p; + if (this.pathUtils.isAbsolute(p)) + return VirtualFS.resolveVirtual(p); + const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot)); + const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p)); + return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot; + } + mapFromBase(p) { + return p; + } +} + +const URL = Number(process.versions.node.split('.', 1)[0]) < 20 ? URL$1 : globalThis.URL; + +const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10)); +const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13; +const HAS_LAZY_LOADED_TRANSLATORS = major === 20 && minor < 6 || major === 19 && minor >= 3; +const SUPPORTS_IMPORT_ATTRIBUTES = major >= 21 || major === 20 && minor >= 10 || major === 18 && minor >= 20; +const SUPPORTS_IMPORT_ATTRIBUTES_ONLY = major >= 22; + +function readPackageScope(checkPath) { + const rootSeparatorIndex = checkPath.indexOf(npath.sep); + let separatorIndex; + do { + separatorIndex = checkPath.lastIndexOf(npath.sep); + checkPath = checkPath.slice(0, separatorIndex); + if (checkPath.endsWith(`${npath.sep}node_modules`)) + return false; + const pjson = readPackage(checkPath + npath.sep); + if (pjson) { + return { + data: pjson, + path: checkPath + }; + } + } while (separatorIndex > rootSeparatorIndex); + return false; +} +function readPackage(requestPath) { + const jsonPath = npath.resolve(requestPath, `package.json`); + if (!fs.existsSync(jsonPath)) + return null; + return JSON.parse(fs.readFileSync(jsonPath, `utf8`)); +} + +async function tryReadFile$1(path2) { + try { + return await fs.promises.readFile(path2, `utf8`); + } catch (error) { + if (error.code === `ENOENT`) + return null; + throw error; + } +} +function tryParseURL(str, base) { + try { + return new URL(str, base); + } catch { + return null; + } +} +let entrypointPath = null; +function setEntrypointPath(file) { + entrypointPath = file; +} +function getFileFormat(filepath) { + const ext = path.extname(filepath); + switch (ext) { + case `.mjs`: { + return `module`; + } + case `.cjs`: { + return `commonjs`; + } + case `.wasm`: { + throw new Error( + `Unknown file extension ".wasm" for ${filepath}` + ); + } + case `.json`: { + return `json`; + } + case `.js`: { + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + return pkg.data.type ?? `commonjs`; + } + default: { + if (entrypointPath !== filepath) + return null; + const pkg = readPackageScope(filepath); + if (!pkg) + return `commonjs`; + if (pkg.data.type === `module`) + return null; + return pkg.data.type ?? `commonjs`; + } + } +} + +async function load$1(urlString, context, nextLoad) { + const url = tryParseURL(urlString); + if (url?.protocol !== `file:`) + return nextLoad(urlString, context, nextLoad); + const filePath = fileURLToPath(url); + const format = getFileFormat(filePath); + if (!format) + return nextLoad(urlString, context, nextLoad); + if (format === `json`) { + if (SUPPORTS_IMPORT_ATTRIBUTES_ONLY) { + if (context.importAttributes?.type !== `json`) { + const err = new TypeError(`[ERR_IMPORT_ATTRIBUTE_MISSING]: Module "${urlString}" needs an import attribute of "type: json"`); + err.code = `ERR_IMPORT_ATTRIBUTE_MISSING`; + throw err; + } + } else { + const type = `importAttributes` in context ? context.importAttributes?.type : context.importAssertions?.type; + if (type !== `json`) { + const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import ${SUPPORTS_IMPORT_ATTRIBUTES ? `attribute` : `assertion`} of type "json"`); + err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`; + throw err; + } + } + } + if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) { + const pathToSend = pathToFileURL( + npath.fromPortablePath( + VirtualFS.resolveVirtual(npath.toPortablePath(filePath)) + ) + ).href; + process.send({ + "watch:import": WATCH_MODE_MESSAGE_USES_ARRAYS ? [pathToSend] : pathToSend + }); + } + return { + format, + source: format === `commonjs` ? void 0 : await fs.promises.readFile(filePath, `utf8`), + shortCircuit: true + }; +} + +const ArrayIsArray = Array.isArray; +const JSONStringify = JSON.stringify; +const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames; +const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop); +const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string); +const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest); +const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest); +const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest); +const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest); +const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest); +const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest); +const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest); +const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest); +const SafeMap = Map; +const JSONParse = JSON.parse; + +function createErrorType(code, messageCreator, errorType) { + return class extends errorType { + constructor(...args) { + super(messageCreator(...args)); + this.code = code; + this.name = `${errorType.name} [${code}]`; + } + }; +} +const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType( + `ERR_PACKAGE_IMPORT_NOT_DEFINED`, + (specifier, packagePath, base) => { + return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`; + }, + TypeError +); +const ERR_INVALID_MODULE_SPECIFIER = createErrorType( + `ERR_INVALID_MODULE_SPECIFIER`, + (request, reason, base = void 0) => { + return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`; + }, + TypeError +); +const ERR_INVALID_PACKAGE_TARGET = createErrorType( + `ERR_INVALID_PACKAGE_TARGET`, + (pkgPath, key, target, isImport = false, base = void 0) => { + const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`); + if (key === `.`) { + assert(isImport === false); + return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + } + return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify( + target + )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`; + }, + Error +); +const ERR_INVALID_PACKAGE_CONFIG = createErrorType( + `ERR_INVALID_PACKAGE_CONFIG`, + (path, base, message) => { + return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`; + }, + Error +); + +function filterOwnProperties(source, keys) { + const filtered = /* @__PURE__ */ Object.create(null); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (ObjectPrototypeHasOwnProperty(source, key)) { + filtered[key] = source[key]; + } + } + return filtered; +} + +const packageJSONCache = new SafeMap(); +function getPackageConfig(path, specifier, base, readFileSyncFn) { + const existing = packageJSONCache.get(path); + if (existing !== void 0) { + return existing; + } + const source = readFileSyncFn(path); + if (source === void 0) { + const packageConfig2 = { + pjsonPath: path, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(path, packageConfig2); + return packageConfig2; + } + let packageJSON; + try { + packageJSON = JSONParse(source); + } catch (error) { + throw new ERR_INVALID_PACKAGE_CONFIG( + path, + (base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier), + error.message + ); + } + let { imports, main, name, type } = filterOwnProperties(packageJSON, [ + "imports", + "main", + "name", + "type" + ]); + const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0; + if (typeof imports !== "object" || imports === null) { + imports = void 0; + } + if (typeof main !== "string") { + main = void 0; + } + if (typeof name !== "string") { + name = void 0; + } + if (type !== "module" && type !== "commonjs") { + type = "none"; + } + const packageConfig = { + pjsonPath: path, + exists: true, + main, + name, + type, + exports, + imports + }; + packageJSONCache.set(path, packageConfig); + return packageConfig; +} +function getPackageScopeConfig(resolved, readFileSyncFn) { + let packageJSONUrl = new URL("./package.json", resolved); + while (true) { + const packageJSONPath2 = packageJSONUrl.pathname; + if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) { + break; + } + const packageConfig2 = getPackageConfig( + fileURLToPath(packageJSONUrl), + resolved, + void 0, + readFileSyncFn + ); + if (packageConfig2.exists) { + return packageConfig2; + } + const lastPackageJSONUrl = packageJSONUrl; + packageJSONUrl = new URL("../package.json", packageJSONUrl); + if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) { + break; + } + } + const packageJSONPath = fileURLToPath(packageJSONUrl); + const packageConfig = { + pjsonPath: packageJSONPath, + exists: false, + main: void 0, + name: void 0, + type: "none", + exports: void 0, + imports: void 0 + }; + packageJSONCache.set(packageJSONPath, packageConfig); + return packageConfig; +} + +function throwImportNotDefined(specifier, packageJSONUrl, base) { + throw new ERR_PACKAGE_IMPORT_NOT_DEFINED( + specifier, + packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)), + fileURLToPath(base) + ); +} +function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) { + const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`; + throw new ERR_INVALID_MODULE_SPECIFIER( + subpath, + reason, + base && fileURLToPath(base) + ); +} +function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) { + if (typeof target === "object" && target !== null) { + target = JSONStringify(target, null, ""); + } else { + target = `${target}`; + } + throw new ERR_INVALID_PACKAGE_TARGET( + fileURLToPath(new URL(".", packageJSONUrl)), + subpath, + target, + internal, + base && fileURLToPath(base) + ); +} +const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i; +const patternRegEx = /\*/g; +function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) { + if (subpath !== "" && !pattern && target[target.length - 1] !== "/") + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (!StringPrototypeStartsWith(target, "./")) { + if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) { + let isURL = false; + try { + new URL(target); + isURL = true; + } catch { + } + if (!isURL) { + const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath; + return exportTarget; + } + } + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + } + if (RegExpPrototypeExec( + invalidSegmentRegEx, + StringPrototypeSlice(target, 2) + ) !== null) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + const resolved = new URL(target, packageJSONUrl); + const resolvedPath = resolved.pathname; + const packagePath = new URL(".", packageJSONUrl).pathname; + if (!StringPrototypeStartsWith(resolvedPath, packagePath)) + throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base); + if (subpath === "") return resolved; + if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) { + const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath; + throwInvalidSubpath(request, packageJSONUrl, internal, base); + } + if (pattern) { + return new URL( + RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath) + ); + } + return new URL(subpath, resolved); +} +function isArrayIndex(key) { + const keyNum = +key; + if (`${keyNum}` !== key) return false; + return keyNum >= 0 && keyNum < 4294967295; +} +function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) { + if (typeof target === "string") { + return resolvePackageTargetString( + target, + subpath, + packageSubpath, + packageJSONUrl, + base, + pattern, + internal); + } else if (ArrayIsArray(target)) { + if (target.length === 0) { + return null; + } + let lastException; + for (let i = 0; i < target.length; i++) { + const targetItem = target[i]; + let resolveResult; + try { + resolveResult = resolvePackageTarget( + packageJSONUrl, + targetItem, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + } catch (e) { + lastException = e; + if (e.code === "ERR_INVALID_PACKAGE_TARGET") { + continue; + } + throw e; + } + if (resolveResult === void 0) { + continue; + } + if (resolveResult === null) { + lastException = null; + continue; + } + return resolveResult; + } + if (lastException === void 0 || lastException === null) + return lastException; + throw lastException; + } else if (typeof target === "object" && target !== null) { + const keys = ObjectGetOwnPropertyNames(target); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (isArrayIndex(key)) { + throw new ERR_INVALID_PACKAGE_CONFIG( + fileURLToPath(packageJSONUrl), + base, + '"exports" cannot contain numeric property keys.' + ); + } + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + if (key === "default" || conditions.has(key)) { + const conditionalTarget = target[key]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + conditionalTarget, + subpath, + packageSubpath, + base, + pattern, + internal, + conditions + ); + if (resolveResult === void 0) continue; + return resolveResult; + } + } + return void 0; + } else if (target === null) { + return null; + } + throwInvalidPackageTarget( + packageSubpath, + target, + packageJSONUrl, + internal, + base + ); +} +function patternKeyCompare(a, b) { + const aPatternIndex = StringPrototypeIndexOf(a, "*"); + const bPatternIndex = StringPrototypeIndexOf(b, "*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) return -1; + if (baseLenB > baseLenA) return 1; + if (aPatternIndex === -1) return 1; + if (bPatternIndex === -1) return -1; + if (a.length > b.length) return -1; + if (b.length > a.length) return 1; + return 0; +} +function packageImportsResolve({ name, base, conditions, readFileSyncFn }) { + if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) { + const reason = "is not a valid internal imports specifier name"; + throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base)); + } + let packageJSONUrl; + const packageConfig = getPackageScopeConfig(base, readFileSyncFn); + if (packageConfig.exists) { + packageJSONUrl = pathToFileURL(packageConfig.pjsonPath); + const imports = packageConfig.imports; + if (imports) { + if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) { + const resolveResult = resolvePackageTarget( + packageJSONUrl, + imports[name], + "", + name, + base, + false, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } else { + let bestMatch = ""; + let bestMatchSubpath; + const keys = ObjectGetOwnPropertyNames(imports); + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const patternIndex = StringPrototypeIndexOf(key, "*"); + if (patternIndex !== -1 && StringPrototypeStartsWith( + name, + StringPrototypeSlice(key, 0, patternIndex) + )) { + const patternTrailer = StringPrototypeSlice(key, patternIndex + 1); + if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) { + bestMatch = key; + bestMatchSubpath = StringPrototypeSlice( + name, + patternIndex, + name.length - patternTrailer.length + ); + } + } + } + if (bestMatch) { + const target = imports[bestMatch]; + const resolveResult = resolvePackageTarget( + packageJSONUrl, + target, + bestMatchSubpath, + bestMatch, + base, + true, + true, + conditions + ); + if (resolveResult != null) { + return resolveResult; + } + } + } + } + } + throwImportNotDefined(name, packageJSONUrl, base); +} + +let findPnpApi = esmModule.findPnpApi; +if (!findPnpApi) { + const require = createRequire(import.meta.url); + const pnpApi = require(`./.pnp.cjs`); + pnpApi.setup(); + findPnpApi = esmModule.findPnpApi; +} +const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/; +const isRelativeRegexp = /^\.{0,2}\//; +function tryReadFile(filePath) { + try { + return fs.readFileSync(filePath, `utf8`); + } catch (err) { + if (err.code === `ENOENT`) + return void 0; + throw err; + } +} +async function resolvePrivateRequest(specifier, issuer, context, nextResolve) { + const resolved = packageImportsResolve({ + name: specifier, + base: pathToFileURL(issuer), + conditions: new Set(context.conditions), + readFileSyncFn: tryReadFile + }); + if (resolved instanceof URL) { + return { url: resolved.href, shortCircuit: true }; + } else { + if (resolved.startsWith(`#`)) + throw new Error(`Mapping from one private import to another isn't allowed`); + return resolve$1(resolved, context, nextResolve); + } +} +async function resolve$1(originalSpecifier, context, nextResolve) { + if (!findPnpApi || isBuiltin(originalSpecifier)) + return nextResolve(originalSpecifier, context, nextResolve); + let specifier = originalSpecifier; + const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0); + if (url) { + if (url.protocol !== `file:`) + return nextResolve(originalSpecifier, context, nextResolve); + specifier = fileURLToPath(url); + } + const { parentURL, conditions = [] } = context; + const issuer = parentURL && tryParseURL(parentURL)?.protocol === `file:` ? fileURLToPath(parentURL) : process.cwd(); + const pnpapi = findPnpApi(issuer) ?? (url ? findPnpApi(specifier) : null); + if (!pnpapi) + return nextResolve(originalSpecifier, context, nextResolve); + if (specifier.startsWith(`#`)) + return resolvePrivateRequest(specifier, issuer, context, nextResolve); + const dependencyNameMatch = specifier.match(pathRegExp); + let allowLegacyResolve = false; + if (dependencyNameMatch) { + const [, dependencyName, subPath] = dependencyNameMatch; + if (subPath === `` && dependencyName !== `pnpapi`) { + const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer); + if (resolved) { + const content = await tryReadFile$1(resolved); + if (content) { + const pkg = JSON.parse(content); + allowLegacyResolve = pkg.exports == null; + } + } + } + } + let result; + try { + result = pnpapi.resolveRequest(specifier, issuer, { + conditions: new Set(conditions), + // TODO: Handle --experimental-specifier-resolution=node + extensions: allowLegacyResolve ? void 0 : [] + }); + } catch (err) { + if (err instanceof Error && `code` in err && err.code === `MODULE_NOT_FOUND`) + err.code = `ERR_MODULE_NOT_FOUND`; + throw err; + } + if (!result) + throw new Error(`Resolving '${specifier}' from '${issuer}' failed`); + const resultURL = pathToFileURL(result); + if (url) { + resultURL.search = url.search; + resultURL.hash = url.hash; + } + if (!parentURL) + setEntrypointPath(fileURLToPath(resultURL)); + return { + url: resultURL.href, + shortCircuit: true + }; +} + +if (!HAS_LAZY_LOADED_TRANSLATORS) { + const binding = process.binding(`fs`); + const originalReadFile = binding.readFileUtf8 || binding.readFileSync; + if (originalReadFile) { + binding[originalReadFile.name] = function(...args) { + try { + return fs.readFileSync(args[0], { + encoding: `utf8`, + // @ts-expect-error - The docs says it needs to be a string but + // links to https://nodejs.org/dist/latest-v20.x/docs/api/fs.html#file-system-flags + // which says it can be a number which matches the implementation. + flag: args[1] + }); + } catch { + } + return originalReadFile.apply(this, args); + }; + } else { + const binding2 = process.binding(`fs`); + const originalfstat = binding2.fstat; + const ZIP_MASK = 4278190080; + const ZIP_MAGIC = 704643072; + binding2.fstat = function(...args) { + const [fd, useBigint, req] = args; + if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) { + try { + const stats = fs.fstatSync(fd); + return new Float64Array([ + stats.dev, + stats.mode, + stats.nlink, + stats.uid, + stats.gid, + stats.rdev, + stats.blksize, + stats.ino, + stats.size, + stats.blocks + // atime sec + // atime ns + // mtime sec + // mtime ns + // ctime sec + // ctime ns + // birthtime sec + // birthtime ns + ]); + } catch { + } + } + return originalfstat.apply(this, args); + }; + } +} + +const resolve = resolve$1; +const load = load$1; + +export { load, resolve }; diff --git a/subgraph/.yarn/install-state.gz b/subgraph/.yarn/install-state.gz new file mode 100644 index 0000000000000000000000000000000000000000..0ae8a4b73bbc3a827b01b2d05c30e9042b6bffc2 GIT binary patch literal 317218 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 Uc{JNTAsV?~j9CwQm+( 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

    _dD-c3p^O+Lhh+>_)~b*2%)cr0?;IB$hKyg z0w4o0V7Td^JYL(zASA!!vWVgU*E!f0V2TG#CPuHlyg{UPU4-`A0}ii|C2%w;(hh}? znG53Vh!W;FQzkwTm`Kr>FGeb4)>@A6S;(qp&`HF^AWz6pM->#iaW$idX<$6FCk`}Q zK@R|a>o_iR{I>JE!?wL@7@mg9{=sq7cXU}J%_f{1$E|7NG4lvbHV4) zknbz62@Ci>3ZdSl=yrH*cUya)2XG)1?fA|pWFJ7a4Wy39{X)2wtpI_o$V}ko+vm1M zF4L{XA{nUr9lZI*UbS-|9*v8$xylnX{fU*SL5Jpwj_U4Y+YT<}1z(=lVGr@RLcsfVxr4$9A7+dV+;1()YI3OffsdnVI`R_S(lWkjs36DNmSxFM{QB|Z<0H+pSMT-#tlz$> z2wh^=fEqd=n29iP#8Pi#Zh#2PZH$B>Ny=(?hsZL{Tx)a{!zMw%ujp_i&AyWrGuuGK zYV79F!Y`#!$X8v0m(|wpm>|U6UJ07$0^Ygfu7Az!vTTnv%Y{3p3`R=RayCmy^4h5& zgHWUm!x47J=-3S(L7dx9E0i8LD(Dzql!}gOCv4R+xP2C|KA?fb+;?{RKj+t%?|zIQ z+}k{R1@Ehk-wriHy6rUruPE}>_NGHJ2{>VFzL+o-YfYI?;Qm?W4(MZ10~X)Ln@Tor zniRYF+2N0dP7lQ&L$afvqLO2QD;S+)tU}gT`~5grEMfqW(b7mA@)oq2=2!?e=x$Rs zwH+P8xB-uJz*jK*fCA|F@;OdK7%#Me5I+q)SDv#2pa3Vu+y-_q5J!*%;insGY^mA$ zEqU_KA3mM)C@K2vb-POffB!(uXV*iDab;6RT7a$QcABmU@-=jWK7b@XRfW_A6KO6g zY$plVW=?(pj>Yy`z1BLCfaZ?1IZ^Rm;J-ybb0<`pmY|@8G*9S)nooxe zrV1OFGnz4Szf%q2&4p#Zy*2;+>)Xp;-yVfUpS^DPN1AWXUCrJQNT%hmnu5OMr3TRZwde0JiOrimN2W@q4DeoiHowsj{^dlGsu(nVS|mk44EtYO zC+FpCtJ;~0hqb^e;z_3?8#b7mA5nGp+c)Yze0co;HsR}|ujsRv?%v$^K6^m2R(C_p zfTn019ESk8UqlzQ6~DKR!E#fcIM)Q93;YAk%;=gkb$atN+BIY}Pwx zP!~gaUP4?^Pw2?*+%X@1OParDFWs*{QvDNs8$4ul5~tQzthR&(;xP?P^ir6c98PG) zH)pT%Qx@KH*+sBlf$};#r}rZa8zH2pn3sf1uTi^*cYxr)R0r3GJWea_A!9)McKg&d zJz0tosvnHBJJ=4$7p;Q#GD!y9AZEQVGhEDoX0_askkohanPZ%H5eTe*cy~{rf|D(zDm?HhcCR!Dy+p5d%f~a`c9A%-l4kPL*O7Jo$8k{3|d6po_fAbGAqm zX7Hq-hURe~r>R~z2wa-X#X!vRNq{0*C2u!Je|+B+z5MkxzCQYvK6~|U_eS#VQ>87E zix5j3gbTql#_Ahc)QDx6#$Z~$C+G{U1Z4;~R^aIEC;<$XTwJ1^a1ulRJp^Eq>)beT zrG*FFE*e~WSpw{a+!aP)>-MgE>bdp{rGu#Pf#a_+oB^$4Mp#lY=k61H9anK0W%jK70MXf3ClO=L5Xw9}sGqNk$`kZ0(Ji@n&v7LGLwo&8TKjf7ISNCudhO z%d#5pr1|Cfjq;0CEZeMl?Y%k1M7Mh5h3#*w4xm{?rJFyh* z|7+0hh+K<9eA?R9IU2Ynqk}z_dCC3yR6Xc5kUC~%Wd#L@s{TYqQpLm}wX! zNPtqJ!#u!X-T7`%cCC!w_qe^C`TM_q`VxQr@=z7_?3Me`oj5okJ6KV`PZ0VJihkYN zT0X1RG6bqKcEYqN>_bOQ}Xyvyl?chmomy0>YvEIH0I7ZNFo9EsAH zWSaHto8}SW?h&!mFBvoc1X^r#_w^;>50yi^fmT6c33s|8lGveNJBHUkp zo~tgToG<{WKv%zgvG-Y@^ok`TJs&1@IOVPQ3mEUecWoh1Uk>aP{6$E4;Cl zV>iD+d*;2ti%(vb2oA}ki^VOuuHg)pw}d~#3e%d557YrR8GNoHt*Hd z1Uc~YW|@&^F6A>@#8gQ`&$O@*2^mYe~f#4PWb=iD3|!sARL166SR;R4&wU=i_XN zuI4MZ>O4)rY>XkTW3YaLr@I#Vkr0pQt)ctL>rn}R@t(;&L#Eb__4*C1Yp#Uh`MYGD zxt{@*vw*?y7?W-z`H+qnAPXV<9yk)>B)l5;g%xZAmR;zCZ-STLuz$cJhB7g{6UV%^ zG#Yha^2*u>CZ2esqKV(zcklJrK6}~T)&b{l1G zx8drMbH^G=W*bou4nh9LhdRdoiA4xJUD1>YQ2K~3LfM@68qQBS;TRrm zQ*R+4Z~^rLj{yT$V>R2}Z(gDO?RWLv`(Eo^+0X$gAEPhY>S@%xH@^dJ8Dy}JD;FX7w4s4o>kh8a?X%cx@YX_b0!xE;g7A3jX>Zp@9;PAh`VK5b4M+PSu0w3!idcUT#EFkG3qN^BoJc3`Y< zTujaP%JCXnk&7w%po>X_d!Wt&rGn}}y@GcX2e7vS{}*m?%-k4Vb%7wS@RZeNS|WCy z=>DNxeBn;Jv}w#e=K?H=3yXe4Kqmy$gH2mL+S-5jRPTR!cZ%kdSMU|aGXCLysSUPo zk8RhcEe;Sw_!Ga0`vczikv=1;Ak_7IJ39k zy_$F94WB&cljwq*<6I0yzg8UN<|f@Rx=l7F1&jpucO3qNOwm|55B_&yE$1a`oD9SY96++El#L#yaAOwA0;jSLNJ?TvlD(XUB(M+P|*+_Lq0dNT0oc zf8G*DdGI$hVKVwtj8KdxUiK9jURcOqG12J8s5 zl?c7=dCE~p8+i;AZ?GRBnb~^=fZO0q`c~MRJPdKLT$oVa>r5m}=e_p=v(*bjjvwzV z97FHTGJf^~zV0lTJ6~FEPxrWciz-aey}dcxVld90I8p$gkQ^4iMjJZI7eo5ETmz{L z+ZJ~!ZPY3EkVq&Eym{`?wZ~N?s|Uu}2H$L6t5UCFHvBd0P(X6l4j`>s6i?0vdcUpZ z(sk5*aAKCtRVW?VyaQqn6qzFD1Kssp*=-;l7U#0^yC$df^G7B*mrjp+_;_#20%Vkr zthgWT>|cHR{g1!CcP9Sq^?Uo4y}ylGkTaqLqZhguAaLQMfd3l2Hx8iJb=t08-2&T~ z=b=0)efQox^h#C~ju4nsfiY(6izq?u)d{Bq66gr5uh|@Mi9A%Jb^G-#OS2Ax(k5ZH zHYihd_d?#+0?ZlBi`fOw(%RmR=p=8Cf^e#5?(Sug4!<`i@u)Hd(~e+DY%2$^1_W(C z1lLv%-Q_yhvBCD?H}?Bq|KRU8;68Z)UtukO{Kj4$W-})8#ZCl*XRTy{1g1gNnCR$| z`z2ht=0Q1RuN`PeoU63v0TtCxO6@bDU^c=`3t(PL{WRTJ-pY+L1e#(h!V3dU`KDla zhUXr2Wn<>sEtK@`v&TmF*+_Vl0|pg{4=F`4|sqw$aS^UtUUzX$gCCpaTx_GZgroG%z+BHUFv!1<92#6riBQ1A^bdwY&cfPaIPIa;^n@fv zAJ(MI*Yf@Xn==4>@Vvq3ObgjZ8q(3ojk~!sP*A{_TT+v|MWqP;xteg>USO7&XE+ zU=}4L&8MMY5~x779M2=_kfEbL-H$LF%7Vjr9DGG<5K_Ufy+Y`p=mCXor`avi3un@~ ziuB~2ytg{@iPs165F=2tG4{4q4VNBIgaVOJe@If*X}I#;H1yayQQEy{C9UPuCpWa5 z%Pwm0iHF@2^G)Qa`7RAJtNSpy#*;_8leYQ>Xo)_2Ab*Hi`s@Y#@PS+%3+L>PA#(2| zL1?4T;$|kpaxc)UhR=Q8m!k?4aRSkBaU8V`sm6U(@*63-}Sj1=&@u*3;4# zHXaFpVpiE*4PEI;T)&hOll{oyO=?H?h>XGWUq;o(9f<(UCguL}fee_EOiw6^vfPZR z!U3s}vLgSei>2Q@jZs0WFtlnenA@Npx6K0>aEg*~H=4}l55R6h=T>s{-avV^?$L`8 znxt7h76wzNNFMM3CVX83RrqjSNQ^Drl9y!YDFYtqJqPmt{v~7h5B2^3{N|_n@jHw6 zm5rafkROp;ATEkXOfFYAcm@f?UI(KS_ALw?q{#!+qS@O{u#B8U?jrz6&O$5W^|}1GV)cS) zNV;4P0!eIlia#V?!%#R3F-EZi6TY)eGN68&zANk&zT~*pGWaUhP*E!cZYw7aSSj;P z6fGU;CXMhD0H~a6`_0Vbmv8QeldPY;dN1P{cqotGx;+-tad3g#zQ+}bsUf^brXTYrM%A6 zb#f;?^7@H--R!||i;!5H$t?So>+&~0+AqKV<{#_biJMPexsO6kV8F~F@>tb;R%1Tk zUgty;1u5jJxZ}h=WwN2>y2o9o3p|oR2d$=4sP-M`Y8^*a4&l2NN~6Hf$qhj0I2p;K z!q`5g%zefiK=7L9TsY<<$IyaRQ7r_aOv0QtX!-+$$7yFLSRcynm+vdpMPI&-~aBL-(;)r@;*Ly0YAcO z0c~UlGo1@9r7jepM_VrF-aXnKtGt#W`ANrJ$g^O=vX=zIv*n6vHzjZLyK@!KOuI_CCYBZzp%4R1cTGK6!=Vk!NR|>&^H&@|7Feqll1+?8wCyu=w0@ zCQinPYNBq;Y;!;$d~Z7JM8MdLkPAqEw7L3`V0w7pvY-`&3sn}$2z$_$Z(KIk^^O19 z{cb(+vls6}gMw@t`#IXD86B1Wmn8r>G;hpyyo!zt z+=7PlT4UhTeiuA3i1HzCIi~I9hV)CEdEu&cAM1?lD|^J+PMzvgdt98Z(Ah>8@XcWI zp9cEBiU0B5$oXfl;Mbk~Z`j#C{dxcU)581mC|(RKLFNp+&2%l85B;FS?>^2LTQ$Hp zPg=K>76r%_VCevd?hFSHRt}l@ie%@RteK7%+LfaVgnFF%(D%kyh#G@`9iX{^uX%O_ z;8Bi1HF6w-aKVK5!@Kyzn4@DV%oSiIBg=3Q-HrL0G(BtJ%cN$~&Ue=uLO3#bQNk+R zAbT2;)tiyS-2*=hft{<|&}JAx!6!0hJ1+#v z-^^|N^3%6p(!(Eobw7LkzV7RP{rc7Y^3(qJ|4aWB2O<-`<;^p%l|rmt7}4iiiX`*!_Zs|&zsR^I$^RYkj2)B`BH*n^JaN!q$KLUod127oR3xMZ+lI{yzSutLp z&*XaI20*b3c@h{>FG}lRvY%cF0OV%U83jD=K1hrk?UDN`dMKEqqit}F5W?94@;({9 z{ba~i39Mra+k%N@1d)iBELY$1`o;a*e_gcq#&SM+?cN5&$8X>?RAM%YmiXmp+eAK| zaS31h5n%NK8!K7HEPXT1qiceVa%ZT@HrhP1KM^iZ~=tRWk%;I_gFYD*oKsJ zxHHj&8*f12cO1@uf#d@tUuN^l>q+@9X{h6~m+n=y`$y_G3hs?hdyGRT2BaZq+9P3Y z5AA9w(hS1IX6Q}q$XIgAfjWxKUHatUe1+?{KCskUqeH zW*85W^|4kUML6;-d~a`_nBe;4TgkYwrywrJQ5AYmS-2?pA|Q zz9yo>$VQK58hh>6*f=5~Ug`tylM^n0v^r!3ZaB-{wHC;Lm~%WA@Q;njH70W+!rWQW zs6-7FZ(nYpnK!68g$MTPxfWz(N>7anWy>r;Cm~&CeZ9{9ACJ8L3;Ej%UcisdW1qc} zA9VoShc5AfS)`hzd)IS5n9x_Mmq=igj}!HmhWn@1^+Wt=`b z#vB_Ur9&RjMdRwY^l@|%V4hTe~)b)|G>XpW$!wWFE=J2Ok$f*?=_*I zAb_4QT{O7?;Vl-w(gTyYXY4}|FyhGWHS>&dZy~;J0wSkCIfWA+dTFE$2lADH!Se*% zPZy>c^R)>8=WbQ(x#mjBJLteFHrorDQ&@PT78@On)@$P_E;2vi`-{Br+7(I=5epXS?*`&bZ5wp=S6K`d8!~Bd@3Dx_X`g{BN_wR1%XRqFyP5n(lCa`<0Ima3% z_ZH$gDo&u4;k7lN@iBOH_QEJwE6_4sOLHt*Z871V3814^2;)(hIL2H{;?Tep1p+E0 zYn>$=_g2XCnM3w#1E3mb4A8DG1q&5ymMyK+pr3fnCsQ~dr|0oUBXjg@L9BWZ@b17x zI6JL%VxhBlHVh6C)7MS?EC2S#HQ(FQ zPhPwa_H^WC)Ug#b?8bG=x@0FvbVAjV{I(g2*jqe_xfkOn2kYMM`Sw)eK zDl1diHinhHSIL5$-bdm93ZsQ@V=2aHz~XDwc>vp}M9lY?>cLm2EIjwY&VIb7_q{H_ zCokU1p02M(IhcsKi3_A4#8xwM^hBby2Hn&5z;IwU92$?thp%zZvLUm3ckP(8s}R=( zqZc_9a6D?KuLu4hz+XHA7?~VOXg}{6m^gb)I)Q(OFc`w{lvkPWIXLS^T?fFW>?!WU z$3SCv^gP-YAWL8(@fvK)6Vz4W8t27D$*b;9$0U ztzGV=7aYigmSLc~c`!yrrU$eCCWUs2Q65aX;?&NVrSCf0uf*9?1M|WLR&y*WB(R4V zgT1>k5I2I>+H;NrLHPpR2T@;Vzh$&x^jrkCPiqu|W za|pd724C9Do^UKWC1^A)h8v1;ZsdZIDHLM|L=GrK-JK&B@_zdQQRfUl@L}Y+n&p6G zKKbEQ-Zv`yTEXD7GNUC~(6Z4`Xme2~_pz@)2}2-J-aDbf^gUhanT2}PUVJFMqIaOPi%Q$YeRmJuwno-)Fz{~$I^SQ0a`A#k-m0;rPxKnZ+sOr^s!m8t1mUYx zW)p|!4xc!{%~2<_*DK9mSkLvdSMQ@;MRco|oU`F3%$!g=*uDkK7^~q9Tm^CaYDT7y zTm7bj)jU8mCOW8p*5PDj+#yPFmkJEN(e;TlXCVIvJjQk^%wNnp2yef^L;oewCO&)V zKFYwrl>`1ea0W>y2~=JbHa6_1-KkK7uE-!9$u5}8m_Z2~)E7I)0tc6Pu0-!U@3?i5*yUCWpd&2u{y6%ON$jz)_BiQKQn>lvVMc@bq6xOIj9VNHsPe4W#)30qK3wE7!emMyguN|&>JTR-v(lnLzKF_yl0r*bclDxor$ z5IImspkKjJ{EhweyI=oM-@m)7pS^k?5u6N7rg-Q$@(4K;^0+1kS>Dd z7;i@CD8mK>r8`&p+J;usV9CQ$G`8@x1iE2@g9Vse!w2}(T`FKsk7*;$fuI7G3`g}r z1ILPSB*de7pL_rXs~WNutENU+{;t>S%zyp%=Wl*j-`7v}%MU+&)4zTnzr6n#{_JIZ zyS-l?!yxQ!3?`-H17?#s5fG>arS~K`rR!|sQ@B7&=`es{scZMbtOFy$aLpl8^&-`o zm8nr0LTbQ2Sg)oC=XHAefe;P^D;?{#WLP9K1d6>@cbMZ3Mt~iyQcS#@a->$ek1R6l zt^DY^*2GzH<#ar*c`e2lIjjVSB1~QhP+915DTZ2jApPzHzIhywrPw?98U zxctU``pMoK-1zMEd;5C*@-P<4y=M{}1l#z`4V(Bdn6#i5gCIw zAjeY`XvVPdLg}Z@6-l(XS`|!$i5bCzVRPKA<3bJ9%nh@c3p(S)UznY5>>5J~cE73c zv}xW2ap&wk$-R&xwB8WJ_&_m-Zn4kxl!~~`?|>!+ew52a)7RKlwX&fkc_bvU$81cw zDYS&OZx!xAkd)ARJre)jlTQ2jmw);0eP7@wFW%dM=HCXb`Z5i;FZZ-w;~s~&pdFsN za?JW>DKwMXC~V#wdFL?C)b=q4Tmy@Nl)I!p&)F7dqB{KsI}ci9rB!;^by9-EAxT8q~8gFK}l?dHR>WvUb_1rgS{C1TTlFjBxxEVboOf zy2FABG4~l=YwbkgN4CvpoNL#BXm;2wBt9_aX_%GK!mwDb=o>=^{1S~2@B!vLUQ7JD z3t`}$0bxbNrUqo+F9IqNM+Wuyjk{sxV=~-9gSQI`{yC`t;nSc!idKm7FGRQhKx-`8#Z-@d$9;S2n2WA{Yk9%}HN zL$dME7=?+h(&8aAFz$_(X2v;bGh|FeRh1Yo=20_;o#q+b+77pte;#_eCY-q|1 zL#{}|vl5r#xjA+H6WO)xXwl_Uu6Ge>WromK)x9I_>C!%C9VLgz#^ zeAU>BV2RGPL>=O%J;wo#5SWm@7>uNJx{zs7VwzuV+5Hgm^KU=!Kz{b}z4f;0mpG}^ zaHWNNm#*D89L|<;&(OItCTgC#g`Vyr;XzgDzDouQlN}3w|_ZYukvRq_+>@`ojXcHL1p}lct^`47gkHM&tqc686K`u>aU~r@7n!w(p+A2|~ z!3YEta`rfNafUjKh`VA;X$>CAaLb?!XBA)2ZH$84GMzE6>$Z!b8yjbh@`Kh<=z1;o z|F>^{{-%HZ?z`WnBY(*H=Eont{rAgCSYx12VfJ7 zjf?^05FZ^psf-e%mqZKxBBO5E(3mLg{o=^)YjIQV$A;NmFScumebp)g3?!3oUa z*DUE@)Ogiruic;T>A#N5H6wy^_do@w$Wwq%Wq`f-R68zIYfrU4M(7qvH?5m63GW-2 z$;5XnFuL!xgHfFW0Px%>N0lL%CJWK;1x(JF#dIpU7R9b>$6&?aJ zMb@Mzrgs!{?_|P6Cqw=#tyb&U#-A$Ppw5JxnFf=LqL8o`Yo22OL!Q^*;a}9__p{gT z?c?{iSE>L5)kROfW@~axp&&h%_--8tPa*HzUtbRNT;%uYc5*rvUnnb1EK=su4Esm{}Sl+>5rIq%yT*wwKBio_@t z96`q~!DKX^1d;h-oRTr@Zy+DRJ2OUE5g`S$yF z-=&|tXm5w)e(TI(_<4;A9s6FaRu|oKjzA`lKKv9ybT3Wh9-~89RNBqgE`YAnt8`3E z4<%tdiN+4Sn2fl1c+Rb8L?SpJ$mhg?%Lp;|wENn+q0L?5T-A%_$z}!x8^yHkXvg5P z<95dKi(^8`<-&jh+18<`O%UWV4a6Y>nS=s5^&&b8!j~l-ozAEJ!1k#_m~7=XFnEIUV@M z7<-@wBaXW}6sGATo)$B_*?bxZvZWJ|E*tn5YbXyr=dPJo2QH;Z@M+!*&p2>NfiiyK zwn`vEar#ol0-&bX>y1S4KYZnFeRNm-?B)CDDzm|!%ORCDai`@XJQHAd!?6OQH$yQ; z>Y&|40|9K=VCuxOMvmmrw1w%!akw#M51_VO|yV9cs;_`+i zb`Od>_igVioq`J$Zu#mL3F^QV3bYxVY1RdTWfUrKpurWGtQK4tr5MBWDm-Lc3(_@b ze!azXT$KcWXfc`~1dq(YK6K6+c2kb-Ylx#6x~a1DOo_KTK%S`bQ5D=m`xcCAT$OALDoRz4$Zd#*cL%1*iU{M`pcVTyA@+@Wt-KX ziR@S_^I~)=f?8INFXUixYK(`kC^MY3Vqn0EWy44Fy0QQAL;Ui?(}DZ>1OCTnFW~Dp z_G{1FIB>iNyI}4y2VqXMTLOGN9_!r2_Ykak0lf89nogKYI#G(V*q+Eo-n|xnAZ{m% zN1|2^s;kWdLW1n_TL~+z?c}1v*uB@w%(!3bX7^qOB!lm$eGn92d$>0~bvk~wB@BSO zA)5$p6XvLFZ_Uv+`F6%$YskF1BVrrt3<&`yH+4qAgk^yl7Syps@vg!+`Zaj6GZ2q!tc z8EPf!gq+7!KMYxsmI~mKmiW0>4}Iz?25mu0WN4&bA7QV<$$wFM`q^vuQR$Zuo(YWQ zY~=TpVxa9K0P`X5-uTU7aR&K(7>zyWUU;E|g+O{a(Mx+`y~?&oOJv zjHE!HYY~z{D+}`&Vc7tI?7B2($Uz@;>LX^*%Y+%Fl_(3mDg7da_RX)~zaJm{?8STg zUj6MP%ylN+0c|{PS+r_HUtksMx^vxwvfNrUW^V%v)oP73B_Wc)Z^284@({+Aim9if zr?{ecXY1xTH=0La;tMzGHbpbPaEyI}OWR8u$pWEs+~A*ruoKuRJ7++_`;7jNBP`P- z9lC=@*9Or_&%JbYtNPGx;D_NYR)M;Cd5s(Z@@CCtc?@JyjQ`iT(Nwk0Yl=U={pp+E zefNXEYs2~6m3wiY=z)-t-@%Gj0=g^#0+&->g3~+b4O}yGr^)38pk4@v^Ig@Rfg#M`5gmy<{u}fXyR>f{gD`WGWM`h10@g)o z?3+Xl=tE|V;GQ0VGtW>JKjTtYH--i+SISwlV4ehm7j`2IZ^+#k5SQ&xs2fn1$c>B? z5Sri2o45V^%ST)K*-Q7*9vxrtVm zT#2}bSqlSR?8aS!ESZ&4Urat~#t!;2*3u;qi|rnuV+Es3lzw~TLJ(_0(MM#lz0NbC z%rk4OxeMtQEcdDO>-0L3@z;N-pMF>GQCmKH-Chg%{PmIB@JP(HmUmcBmToy4<0%7n z+~+iiNeA@fulMRDS&iU`;Vik$5$D4Isju+8CNMJ<$ios2HNzBKw~f$ECAhtgW)dbB zz&v=36J}m0hwrRd2QGQEK*3bmTp0WplFL!BX{h;{myg_$2f5%H_)Z#B)kar!L}KE| z=amD@+y$F8%mB3tiEM$yvCIPVJT!N_Ve$X`9e%EN9=D&oY#$YSiH4Vqnk;^xd;ylT z9ON{}*=8}&@iQ+?1$TY+x-bbEM0pQ(wz_*zjGXxQI z&QfS|sZP8WdyxSv1ZEFGJ~PiGPDS<=k;{Y6bIchD0A-Me+89q7jXDT}DN`}@Tc;_g zh@Iw~18JcPWGN=o@JT7)iBJGuy*5WEL5X_Ln~cLV2ltcx%eU`t>Sr(BpKmJtu`$D* z$f}|pdo#IWMnz(Tj@=+F5TH_Q2_`5D`PJyj&rd{7W8Ue7U!_GVyYI?oB{KvANf3csxweLSl zIehl|z1`QZa~J7e0G*zWICxAq2${<;*PVy8ki;t~hrs~{5FI!6nZp5EyF7y(9HhJ@ zK<%Xu+g=!f2R;$bifM+VbOmLrN+Aj4m&5DzZ1k5E4gKuJ`}0k`|1iG-3-{w@_SuW~T0i<)YCsyt&rZ{E39ULfeAT;g*4}~f%N>=&5MVX% z1jncwR4OKbD&qXV#)CZqCJC#Z~CxirmK*IQba;@YACxh!{PW2>^)-jL~`yr6}VDQmB=guOuU z2CG#NRAIE}T)*XvBNNWXYfhRt-nNaq5vZmff-_g`7QY6u{2UTpHDBjc|Hgj&_GkO` zU32GWuiV>`pnN(0!ud)2(wM@lj?35^b2@0OGp4uhU;wDH;x;SLmVFa>V+`+KluMvm z+#x7cUfH({m*f-l<(ZbF8Uu+tu|&Ct9fZHXj8?yxmwNzzGODi z=vkBdwk$MP??$pieUF;Pq$TIv#1He1PvAfj@ZxUpMxTWe2`{;W};;)0%!T7Yo(6LD=neaz{O} zsLgy5(^{5u9Kn-k&e1q~ZtI4kEhQJVSStWgvbMn?WUA&*Li2BITe8THzfiSNGs<`?ttYQ49opS*T|#ww(L(66~949AZ-7fWqA z_#9&~yeq(|l_y}!qga=Kj+`>by1OWY7OjZ5gmWjV04MC4>~1uh#>fSf-vC;?F`l+f zhD}zdB;Jz2^u_|n46ipJSQm>iG3{>-m);U|Tcq}gnSw`}Xy6#=m@tFPWSlRO>zXzS zlc#X)***guN56u;c|xNCoaMml3S|D7muF*YDWBHWpI4H;L>=A>CVld{eZc=sFjH$X ztwfrpD;XL{GUw;kd*^vxV_X-4QH(OjfyQIpMMw4mjJHwHp)(h*QW%h(2#e_P^oX5t zG4LxJw3#vB>41pV)a?zcMcf}{8h2G083GD-M)tr9bI-dl_7w^r4~#FNZWHdNePc=( zYZ|U{jx67Gkg5#lMyYGi0AfBxAftfyCgwsUDbGnNSW)a$j28^#=Y27;Tk z&s5SQ`^q8s*3;I+M|3k!(W5={;C&NgzTHzgW)pOLuq*<%H@>o{o+wClZoYmeEFfNt zxue1BiRz>+niKY)Kp}Sv%?-KZT1yZMLhCt)UK~7q`yOYWac~!MVJMztA|&=^Pk;L1 z=byj%`A7Sw_u8hPy?Af-^b4G2ksLTBF<&pZ1wT{Pc-9N7WKXiLFPt5s0n9MC*@eai zqdB>$b&h<_nEiCG5F%jc8m67J1(KO*tSO8Md0@^BD11e8f7NTjR}o(a>u<%tF~4n% z=)^3F0WiN?!*`R$7?5NzzHJ%#968R$4_1TQVA)EAbZZGvVO-&uPT_$w#*Khgm#!a6 zy9TV*MYs9&P5N)@eIeW@FWR5&B_f08%PaKUJCJLhnwuQ1mwhkZT|&q_U6O)STw?BW zS?zOEUw{^4JwX9eIN-YFP# zD0sf-#6KkV_yjWWvO9)J@md(_#aMX3%xS@jNZqsyOlj|p9^;IYdYtqYwh>lzpD{;K z-(m!%eS@F^thogAAo?2Z{hRt4Fni}E`pGNzXB#^IVf{8NKJHj>L$|b#*nYVEn%{~Y z+-*Jkf`u386K8-;HByJ|83|tEop&n)N+1P_+S0mGW1>u+y`ANrLgiC^;At78x#WQi zc29bpW&=Sep*Hh8I4zQ_t`=DrM;mf5jH!`yJ)5NLjD73UEyJfCNVz-VjcUC;&!V*% zsUsX(fP94U8t_M*1_$COJh?8{N?W|geI2X#tNP~(dvE0Flb7w!b`u)T-|7o~V!${s zw@^E}vuIx3ld%z09arYadk1$IG7`{z9L2}Ufw?_0Y~eHKgA9FzmhI{nrmXC%p}Eva zO5-vkF4Y(C<{%_*w62kjy`(@Uq?>Ax-JHff!v+MLKb*RWZgDoJ@CYuq8N4@O!Y_DG@NmH zO9{Z|aL>|#3z{UlYa^_&6-aupz2r`HH=$8zKrt;38DMeZpIjvXV3TazFnlm@$Y<1p z&ER-Wl^9S!NQjCzzrIVq?(9F}QvAWre)bB!9VY&&GJl-t0|c$j2)-2>KxYvek;N+D z<)Lq1kCb;E5tvR9ZJc#n=Pe&-GlaMx;CfPfSx+&nD9m+u3Zdw>uVd3zG*j+H;csln z73>4PpGXM-}f=SIDepgjV_f9hR*3zW_n1mjsR3_5R29?j7iaERVaY92id zSCU)&oU(4~&8Ne59iOI}GH#@InEY$UxC&iKKp>j`h zvM`HV7037lbuBVZL*A3_QOSw z&JvUQlh+dgt1p}pX*jr7D?*fS6bblSmOyIOZi8US4T+6LcMfQMkZ?z2ibJS+O$Z^Zk*9Y-`_}4wH@88?j z&tAUQZPl+|RX8ZgL{4l%VR|!=;75Qu)OGrlrain_6xIAokq3%XgSw8()Fu$aF=omh z$M;6Rh%WL9T)bc^Jq2Lb1v9-DN(^J8&>1pcBfhqJYJh7p*#ru&jcg}ja6Sfe8WJfg zgKQqcc*(-lfuap92^FyqoK^72&_t*SGpmbX+z8BZ zy2m^xuU4W}g4*>~6ov{U=2&nLirIP~KPRNpef73Dk};ON9*L2N#d}UHaBl<7dLso( z$bv3fU!TEWzpp>lk7e&|>t`?DM{u2+xYuc?tYZoC_13n`inX=po*VZn5Y;MiCA33J zq!5;AU}`QB#wF$$MQQ*qp+m%_Xm$uN_%U@$>S_D>(PIM@+ zoz_qmugSQZ3<#-xI+BEIgWZ_Oe3@M33&Go7yP$4|vh(>>E&)_u7{RVf;L!sqg>zOZ zu9BGAhR$ZMhd2At9row%?H}ud^YCY{;72!|lCk>;0Yo|jh!~eW{AQ_ci1daArgi1Y zfp&uNS|AXWuh-r4viW$9XSFTMuHaKU53d1!@i{H?0#l%77=_s7yQiUZx-`b?lQ_Bd zjLRl1l4_-~pAlf79Ap{a8?e)ohRWEebc-D2&Cnu{$5~L90ssxgSkO%N8^bZD-J=uK zxC^HK9e{i`KWG8PYuqSagQ9=jSv-b6*xAos!PlMr+Fk82`pC@bxj`&|N@dIgedlC% zMu*Z`cj53xS7eAuYE5RXef&hn*h&`#pyLM78u=M>K)~%qlG8_!pofnG9W`j0Y!b*% zzINi8^0Z&jhH@@L;HNuaKf{F(z%bB~0(Qo+2g^w+nyWD}H{^AU=I?&n*ppq$J~|JBeK?BZuAVg^O|q`QV>$|MI%wW9CuOYoV)cb))Mh$Q)|xI_(#MZ2eKh9E5neLhyG`S zkF_??=J#OmEtkQ3I5s9F2JI9mc5f?BGtj#)+!H%rTju}qPd4@a1Mz3C-$(nZ2~7B0 z54ms|hBjhr*S$XO9a&cU#ClS2vSbt^l)Sf{6O%FTd1vy9I|2X4IHe@BCg^+%N|r&* zAgVC(fJg2H%vSo$TL{#@w<bIqhc7h2dOzCUfoT#3iS$KsH-)LC*sdu!H;%! z-D}`9pg0zj8T|z_?q1l$e|n%@rODwT;&}MOcG7&Y3Ih?xDz}L zx&^OwrcQ?H1%F3e-{NRI=Sj@}n>NPa__9);x}-Z6Km?p^bG5%2ulc&OzyA2+ho!{N zUcrw_i8gMwpg}7GLRX%5o`rcO|MLHZBV_`p;I$ueLfc+Ovk6jo@+EmDRY;U2szT&w zNi11710L0Ta4RF;r{EArN&yH|%6>lB&q*Urwr z`QfMcTI!#@Xm149U#4qtqL?#yIz#cjK&@APId}NOmjQX8=95ow zZ~`?L5TUEI;08xjW4UoKo{-~=xoy)a2!mA?kggN9#>Z)F43`ZDjGS06`YLC zmB8H%ncyHHbNyxt?yrBYKm5;kBTS#YZZG-5_1g%>nv~gl!brR6;^3$D#KSbUn?T&a3lekGpnAUNDjs(O<(K^J(Yff!%XSk; z`?23vV|hZzXOz>AE*XA!ongJ@O}(xi(KkvCoJeRSVI%+%gsE{K#vYO1o)YaS|3>b#?GOR(s zp{J5IWY#iIwVc;PLOga&56@oCw0Z?f=O|+gfz1m4ING4xn|kIq!u-RO1eK+)8d&q% zE=0xp^d);UAe?@LfdA$1KYp4Y&X1ke zS@hGK2@YB$hmnX18ha;_RJk#Q8ADOPENKEaXq+?VK?}2L84SNnAaj*#hxI+Wy4KCm z{AJ>z=t)-PwqMgHeyu=8ZGwz%G!0`q$_)_8NzD;BPr4Mv@)?A zOWDMKRFhi0x;kK|dTPDsT&pchb2B&T1DI^LCEKQ6=A2E z(X-2nd<(Ff88rc9JZ zpV4B3Z_0wf_}M1xZ|v%0%?i57pa+jJtK9q9;SUjdo&}MpI2_gN{Dfzb*|s!-kjnYo4&E@3djroF-6mjQj1Lw^st9Sy6*HdVzm!~%$3U}GdB#jU{ zOKx#-1LGtEY%v-Y^_)uOZ5W=oQtVbM7@Z0lVclDXU=TuF-x_CJhg0)?<)(=UYDuG8 znkzLAk#eL9aQwvZ-1XI(+!h1yBcuEP$zp6U$Xg2LP7I`^QhF=QQPxy_fC^c_UiRbj z()#7gzdbxJJ$v=uJ1>>%g~3+K%Q z{&c{m*D+SBwTn07I!(=IxWK{{k_J{z#%X7XFGKX>w?PQyn}XqaKww$mtvO9ZVze}c za5gMsMt5p%6k4R{xKg5aYGT3|#Pyb{hc=Cmo;N2fp&^rtQ2L)MtJX|&)0~msQqEhk z=C&~S`{f@#yv$F(JnX$ad+ly{c0VqxX(plOVVjglUu+r1A5n8lsZy^>(JdGmEtMJH zRBh$fd$Qe2T4jc`z|?$A6+q23a8*l=kIo4_r7qnn0J02}xKkZES!z0WJ}}$4#I8dG za}e7U!%-K#ufuGa-IzJKe&So%IZ>e~?0wZx=3a%>rMresL!-NJ3^xLvf(E`667*Bn z9zL=fU7OikB)jT|x96pQ`jdZs`S$6J*YeFDjUqpL0pEMDd8LkB*}__EsQgg9J4KP? zoiGo^kEFWt;HspaL{+y0?%hTL{JqZ8H-@ShRuzyAV`cE%wKD1sud--m0S-%1c zmq-Ur+goZ~^BD-s;68Gj?|Vnl;^pV zChn&$SAaMWf9aXXF-}FL5c`^Q9b-Z#(rgrzeFg(_K4=$|U8ySn+IPEutpED;F`N6z z%Xf3PN&oR&rS*Pt&sMgY_&jBueHaN{1RRMr78AvL6~3{nG3rz|WP`mf0^MBZ?j=(P z^*u~`=PVyxv`)GWIw%ALG{V~VbYFDwx3+v+I2`T5Sd}6jV{F~NLzndi@Ob#*$DltZG<&w4N~}&<@})TaNlFr)|tm_LAKl0H(3KO<$*vefjP=K$@%u zScBN~We4p9hjdloA|)}mSJUW-MveE4!(oj^Pxx*;xr|my5viflsTY#|kl3`Z2o0=( zyUDe6lnFa(N|#?AgeQljEov)kI8GmmkEHjT)>5--N^`c-)YUnW?s@1#1L}vGeWI;j zAL>7Rc%7fi=U>mkU;gs>+owlE=TBa~dk)&$W1YUU)kJ)v&w2LRA{z$Zy7D&ppyWYL zxBE`ZGjj+ds&$5>HT7fj^ess^c9)!vmvSunWfl#WUGtHg@=T0&b5i$O^Fny3v)0>c zaGztkLZIUh1x9^HN^DXyceUNd@zhd<{sxgQO&^w-;BZfga;r{GL@`VUjM+`g#7|Jh zK}>LRH2AWKOgLa+@T@lQT~dpG{8)eY`tjTO68?~f_UsjWPZlGc8_gDzQjKdY>_RtF<<_dR?|fTa1genU2ie&&3QH2qwqa%<#fF=675A z^`v0=t~;e))wCHasz-Zu%R%rb#xkja)I+M)MhJp0QR=x#nsX;<(xG|qDb2pD@2mjf zMr)c=wa`%*U^ZzsypPctQ16!Rio%qCWYc!bc$WG>0x~9g?o&oEa_%Z+*TNhchG^g$HE^!>D^0?u zO(LS`=|;fR4#(rS!ag*8r9CuPQ0_6UaMV*Rx+&~FeyqRwe9o7b*N2zaC$Hao&lROM zU}&blEE3ug})rDl$2)PzYg5|%O8IJ<-@nv`1Ivx z|MvAq*6{j!zW0}xZ=YU%`SM7f`|RbsIUN5-`xPzd1qa$;2j2>+N=cp!KJ~0xkF_}y z$XfFX@ze7P-J4xQN~*Q=iJBwTw%HAL;v7mF^lWsYniDv`!rsGNf$R=}2MWghVAZ*J zesOROX*;v0&FEXyImVvVYbbdy+Nb4$Sf!jV3@6RX?o<(@O!m38%trH*6w|jkaEqUd92w(&Xl>^lvbM)N<733P~*)-)u60?On2H6 zL=pK_w5Hs4E2XYT)M9JQVp$gxF{QS4s-wof(8ZPIpK7zFeRf}xSIJc9KroIyA(Y`-=kuklqRm9Bo<@|J z1l-5r76_p)|xZ>7#3lZKZy_yo)zx$xohjp51%Gm@#{m%z?0YR z{(SrvRvRfNT$ri!Lkdb`ZuNpXWHf*lfaIo}4wR&1Ko)dOTIe=wd(_mII9{Y8IY(Wm z7atsIsgQwM=Cd$T8DgU?Mdx$UsAL9Px7)--S_K2to=$KU^mRv7Yo}-1QJN_S$*5Z` z*B!eg+c^*yEC6G$X4kQ-lx0Wpic*+en?becR@aK8E;W2d0sxDXErK7Qom-5XXZnB4 zFQ5MW^?Z5xLiTNbIA6bgIsWszPx;xa`QB63ESnQb=9+f(m=4{tx~FmsRIkWM7NU~f znyh?uMBaXg3Q7^CqH?KiMLEOg3_ZnsXCeTUW*0_Dno+Z(3aVviFLdKz1DA9QfZ07U zND;dH?55?2)aiYkRfHK{;gzH@aBShc1nOb|)T%I-e#R2;F`*Ri_ST?vwwe<%T6NdG zy*o9=eqjdZh7M3dg3L*-x4ZFMdGXW3RLrwi?!AL@#?N(n(PbHb9dd ztDWKRE}-*p+bxhe5zquY+ko8_&d_6|n&zntb*yVpbSaaPb^#-2Tc?5*9{IB8ra9<% z)u7yy*mrFem7|P)Od~{I)10H`TSw=AKOfHe_T|&ZmpI=ZrcIx{ez#4Y@%Vv>WR^c7WB z)c2DY@9qMd|5)FqgnlDGiH6WnL#1Tx@+EYb;2hxgq5vo8cs(Ua5#qVy zc3SQ?uU{!iJi6RGd*N<3-X9lMzDlJtyA|Hj&h)MIK&DdW_*xBEp+oTL#W{LPnz=NL zY13L?-VT$5nP%^(F=S`L@4H5lnNk>qTt-l8)SZlI;6?n<#K`WxeNCHHOc808xiK0Z z$bn3!0;kW6{pvtKTh8ihESP|HiEL*Hr0rfdH+bcmTBXe43@LY6uFmEL>GKRT(LQli z_0_db_5o43c*{4M&TlXN;nDMa_PX6~yKgV(Anjg}9<89)2U??wG_4wTB6g4&q7og& zW?!UHQkx}8O11{jZQx}FM7=13fab@>DgoKp7qx5Ppi0reN9ha*MMRF0Ig{R25(f$1 zOBl=qer!@(?77Yml!5NuGq6!`QLGfial3mNQ^7pX>L5~*tkgER38ro^H!}avOK5ZU zSZBw^SP(FDQt!16^dxua+26i?dwFk)_1P=;-V-fDr1y}t*A&mmTsVj2g+6p;O=X{v zqD#y)$68#Ae62M3aZkWKPbMP9Tv|<)s1`C*!GdQy4MzLx(9FU8w2{gs8Y+67)ZK2w zYFXPT1PiuI4L#zW?`hImg?a3Q%E?34bm5)M>U8QBZK| zr`{%C(3rMeQ?S9F9Y@@Dv=MkH3PICdPAk2c?4`A0fNFD=wAyAsb(CDnkZOHdlu5hh z;!A9D^aRpI#pXU%F0kFn=$5K$VWyWg@4unnUOxE4H}u&H_udjDpo;7kJN$ z?gcr|)7Nd8!8+ZIs5t1!f8(j)LO?pAtt+?Ui)q7LMz$d%W3FXw@~(wF>vYQ}7h*1n z0*u-^{5Ge$HQf_$`N6P~<&@;dy+YCJy%#xmLYvq3GT+Z$xBKV$y=)|IE!H}62q#B+ZpQP3c?`Igyi$q#`*x;Xv-lfm^5UOB3HIjCd9A zDW9eL@&FSAzPq|a9aBM}8zwkV7}ZZo#0}_blu7dCWH3fq&)8YJ96Od4I5|*L#N(HN z>$QdnXpc6eL*9*SIbx7X1?1~i2b|j4`1=sB=55*NA78({d_L!YQ5Sr4b$RmQ-9J?M z&gKd3?Z{@woUxdIR}Zfn7VlnV6)q5cNo#4!uz_y-Y+ZdM#%(uQ-jI>bXc;PwCr#Cv z+=W*WKC1SWVyX7Ecbm=Xp?urLvfLulL{xG^6x}q|Dhm_B%=k=o_kt}dZ>DmZu)Wqb zlMo9^nRN6hbEm#**1Yl%G`owQ$l&sJ+8j2y9sNpIS&_S~w;5@)a0ZZqG1c>P9o z_pQ$RkjwMj)w>S|e@`3kq`6WB?W>8!DjXVwVTV;`9w&FM%S!+9>GQYOPahxE8J@j-?|xC^n3K3$UWtd#ypc+*R?Ue@f%T^r+0V>` z!(xMnJ4};BD?5>|=Hs&H(w``jQ%SL|_(rEDaNI}QYL}CRfdgyQb{OOoueUGjAamtY zW@HW#-9`$?OQMPZI%7o8UfW{)bY?CuQg~9SG;ro+rsag>nLDguTl?9bIGdiroSpT4 z4y`SyuG{x2F^to3VQl^Oi1gR(@<)x-=dRvO^+lQoX$j8ZJa^OjuY-(>9U~K%5+n$*Ll|3sB=g? zx7DM@kr#JK^)vSl-UdAI&~dqeQwmkMR|{*YPi^CXCu9I;jk2T`VGkSoic0u#Wfn5G zM2BPBjDxQr5+kDR`nv7x9iWl6lyBeGfB5JhKRt{sJ$v2myD|DESdi+Ba_eL`ux1>v zGH%)QF*JiamsTnX-4i5|Wy@C5uQT-xthpV_%P_R% z;kBWN(87=AUDkWrsNvVuGK=(5wn9jd+WWR~0q`z=&$J~eu^;CS#1bHxoL+^hpw{jy z*Th?hk7uNB{QvZ|B`!%(GYTKI~n-KUK_- zi0O)9e}b!9?dsn0b%>f~WoUHet1a70cd3=t-AB{xrFXWFGjbR#T&3xhIlRGtwRLDb z#8|y*v3#(9V1~+Yz|zXMsHM_s*V^H3PU(Qfw4Ok9QUU^2tkclu!Fy~mH#0P492J2D zx%WK8v&j69U9vYL-<4-o8+9)r8++znZ1N{q6`t~L$#gOvy5o*cc|kv3_Ag(Yuj<3+ z`rP%qcO-uo)Kdqoa@2HqIa@{m%gZ~hs7G=wTV^g3>mJ3L+}Tl@dGyN0r*pU-H?kZY zHX3R?I@hZMHp>~nT&mG9%FjA88x(r@UCeFXUTct|#Xv|MdeSL*kv`c}VfZyUYi!9a zAK+3=cl0XZz-|aHB&^drb(qjK;*!M9ePxEnp1X? z9ctBseWh^@Pur_Ap?96li=HvFG$9+b80=rE4l0~&buAUPVlyV2cJpD9o0V}}EkrS# z!j0Go4ezDf`*2{ep~{_oIi(6g!nT*RJW5V^^U>|CSP@H{p^D^Q>mr;PVWhvW>EFB# z0!*K6GiK_Rvs(;Qn^DE>4gmej>&I_)0YDy|grB{5_Xnr9V#IR6r`L4p-r8gO$c*Lf zJnWjhttjEq-1V}8{-$xUJm?#0n{({k+Zopc3s3j=x!aGJmM+y=X1Z z5=TPS+U-G@-Y^7uu4M=%+-x7>Th^9c6+#9WvjkNeT-L3$&5YpE>pzk^l)ycfHN*r6 z%rk;aGBIiOf)hTG2|_&FnxUaV__a$CP_DO;!ax7%d^!H*{P|IV>Dg=d9{r;VKT}0K z!g_NvBkWU#lbrHB$0|LC0e7sc)aYw3^RCKB^2V_8aN+9INQhGX1N$ns$LJ6Eyod7XCZO91ly&h;;Sd&qE6Jd)k&`JT)a-3fTA;%K}tWf zs)rtO1egT(+N8}?TRMWQ{?7XNyPwXtm(O25J)C)b_R_sqF`R(nI`Gm0s)@)BE`sbm zo2?vO5-P$$r(p6QB6dy}-zyzr95H=*Ewe$gSJ`W)sZ>|EcfvZT!69NG|L(nH*{STCsHGdAFhB~7?PhX6ZJ$P6FuGP96^?$Q>MH5bWKLxiJ%MXD0>Dqt zs}jC!a)HMow_Ui)cK{$|mPHnn%gD-y@I6GHVFpCZ#na}NClIb% zYK{%F);d(Bz)jA1^`zO8MkyS;mT*U1Yn-mkFsnrCn~&j%!Q4tiVsyLz{$~BjzwGnq zfj)cT{`!HYKkD}fYF>9ujw7^ozfhVf9R=G}yJ!IdY1xti$rcc0+3IY0rl#Zno)l(66B%c{L;g4Su?G6$Hx>~hQ9 zzNx=|1(5dg;q}`?=JS)+?ypP0>5uh~rGBRb%Wg?Wlw6iiRT;D}95m+MXJ@#GWkbL2 zi^1(ard$k*brG>Ef>5@))N+{;adqwO=#)JPnxAbliSJ1Rr*ejJspwQ2TD}92`ZbLW zj%ExIghLIXX_S!$k+TTRqj>4tcoQAYvpc!hvL~-MU>_xkMn(2@7c0Qu%(IF;V%spC5(kr^lJaToq zBuTJs=cZyib*#R0J=jVvE$na@1(H?4lwo>E17{SDF2)ejt3l|uQZ%&I1=!eze^aY_U$S){Tt&R$ z`G}v|F1p}e0FHVnrw}G1Np)i-D70PgsOqGyG_|LE9RW|#HWG#ZVv$R9*_lZ; z+Kw0ageX{*bz&qqK1Ct{?ztEny>%T@@tdAIjJN;$>!*i_?I$nW?JHV-B(`-jqB*Ix zHL4Y*H|nORu98z+wg?!kjY^$Fo()ey9F}Hw+vp=mRYT<)0P8^=2Yud4!y}9#azRFl znY2$ET1EPiF;<;@-aCmBZ%)bsZ}~wpM7`mt?$}H8bX}2P!k*qKFI<44NlA3~hKZFt zNh~~h0XLSBGjlhgnRo0AY>Uhi^|#3!hpb+t;YQVTt4jVy|M>Ow@ z>FbD|TCco7wqm=}bsVeDWF?n9%0|<6xZ8mhsW~BYj@}X&+#{WwYOP8jkF6~CxwZhN zvR)2{&pqT=?2~3f{FCdD-Mfp&?Iq?^aH4Zqi?sW!%q!K+j8|JSM_-F_p0>pHjL3)R zM`{qD;~3)!8o5g$Y+&Aoc_kIbsO}0Y=)p^MR`P-_*E}y5t~11f<=}ST{qW_Nm*wkE zkM`YXFWp~1(*EndOB)MHQ^5-{6y6(M=PDzHkC+RG2nQ1tZ>N{kQ$YyibwaU0Ho1Cd zwlhXsO?M9xQ^X>($KG%TTbHqYCepNV5KxxOv1cpp_TBBf<4wX>uEeui<_Obr4^m-~ znOSNGt;vKY>u^U?%LgvR3~rm!6-NbekFBAJ8V^aoL#HYn$o7njF}F4xf{{0_bN8vY zb>9E!|K_hBh@Aar=JTUh_Sx%rUw3%xmG_u4w~&;R>q-M~VwP&onC}W%vZise7=Vgf zk=o{7UYX*GIk%_7=OZax#!@c~euR-Onti0@&H$;5aau#>h5p&II!@bi+HF@=TL+bk zFUmdboJU`2>;&Gf7vcq33y^Zxp3j1g#_(w-L0Y)9Ad>G(^ukXREwiX*# zr6<9#CsH!KR!dbk+pYj^)l-;PTSHQlzAE%1FiiSkNDDg^KQ$R@J@DJa|&kTxetN$Y0jOanwr zT4zSAl{#rvgC?lEomo1(qr^MiTe{-8DMBgtV#g!i zZQ12Ski6EE_hmb7`!HKF$63^9I(xHfYq;}b9XYEqlTZ3VD@9s>u_B#0B|d@-X3y)} zrxCZ?@NeVOmzU!Y<1Ei!x!W?*4=)jH@L&=Qg}bjgD?iLm2Ty#AGop)EX0vMEyXmQc zcQ~{WG&$U)3K##B2L(uNUDg@y7Y5w~CB#gqb~^aLB5~TA5dep1FSk$hZ>fg=?4^6J zC*DRn8#94+etOR&Qoe@goCXq>Zj0fEJ~B7N4I=ZbqN+O2jEs7Ci~m zb}7W@W;V`wv9;FRETIP7=S}%y<&FX%5mi@&YTeT_Z`cCRSZC3Zlkc5+V?20|c}^5A z^Lb!!M`9w%5y+PFmQ>CwZCY6=Qxxtqj};Pt?IIB*E|^nr5uef=OHABW2LJA-PoE!c zxzAp;`w`S1P%LBIzLp_tXlLdN@i0)u>}{Dh4%2|Pd|bt7093`L1G`>ltzF8VbLT1{ z1WV>RXKLO27L;j^eZ_PQ?B2vpSI|HW3~1qZH&jjrDR;vg5=vG*GYnSbxH>Z=RS;5k z^YEoy&Vl31c515VYh71STA6cgF#Mf^Q)x>$k&I;(C3-6{TA~oumyCmaRYQDg+}==s z|7OE@%bq;|VLf;4?(H?-=fsQj6}i=sXvs3f>8I9NtYeVfKCud~+K4&<`tQU_&K3JO ztuy`?xHhVlv}>|Ga+aE7)vm<(8hOi{@oMF;(Ov85!;-JjWZcb(XGtuEWiHzXDhElj zgy1b(S2}JfS!ioIUHCT{USI}6%rb+iDJLez0U46kZq`Y+YwygZB0@Y_=Wdxmkd`G2 zh@lX)lzeAG{@u^7A76j=$Fb07FWr5->@7anyLzVu06FZ6(0KQ*X>U=61~7C837SZj z3E7H{l1u<%P{b_iH3vuv@VmWosuwJw`5bjbzIiuK#D-=7`P9<2W_A*0`0mCQ*@t*? z<-$bCIDDnnJk)EDblV=)lX@Akq8*_y+M%$YnLV9Qn$72&RC%z2JDu)&3fCK}%yI(b zVIeQ>q(q_kd#L*}dUG4z{_^_s7mr7`mnW~=ZC<7S$Tlob`PkOXY0DE$Ca`c?y2VMA zNY)XvMzFY?LrM)%bORD^aF<4wmYu}^5P0J*$w-9Fur*eZGrd}-FiIz6?QSj2UJK2(frzY>N% zM8aO%L2;LSsOtt8I;aSiV>*+NmaCdKMwN!PbLG9eCa&_g^KGBzzn=B&#lHfTe1rga z^77r+@4ttTFul?;@WW?0yRN*;J`QFI!OAQ-6O9QEduTW#K%!iH?sZdqy*V^>5`BW<_X&0_gXhtWpl z)iEQ;K_6x)TmS*r!qr{FPwrjz@sjgQB^P#EV7g-fb&sS~*1CKQ)R2z@aUbQb$@Ygg zP0h=nU-!31C!}Yu-tANU^&&HC>oCI-^HU`}NtuOTwjL-;c6jmgip_9Vu81!ONf1lP zQymOycRKvT0$$4DCf_PC@#;D??X!%stX-KaKb}yhGu0wi?pmj1+L%c_72OfNXHX= zoqBr&o|xT~*&jNhO5VN`7UP6LB22xOxUfQW7FTa`3_(|ZuHu@lj<<2`adK6NNTMgt z&I=E_-rz1tL%kYjDnWVPVMVqvZ1~-7OeyL0Bk%6l*Y#*{=E=)<`&i}sd%N(q%&0>P zX#ffxJ&mmfmnQsF@2Gyx2zL=ZrRJ_>*_^;o>LM|}Pu)p+l5Tx0^^~qbz9^&Ad>Xac z*)%GXy@kw29+E~|tIXTv_RJgt)y_8RoL7taV7kkvZt>ju;gBTsrmV#2ddAYTIEHkD ze#voU6P(s`l`58iR8TB{?Ua_d&U0GPp}B73D2%*R9FF$w7~}8Ohu3$v;%6`2yC2wb zN{)nxRn3xUq-vT54b0T?H7kULy8w788R}C~D>OL?z1}lpREtw3wiA6ITb47#`u5k0ca-i)9(rMbKagV zfTo~I7%R83mEI_VA}G1x1Pt@ueOvayPx~buu5*uxbj*~ID?Q8Z5FS7O^6k72dwBNZ zy(cvx0j@fl6n?JGZpbi!%#Y=#3|+z`SZ%blnq@|h9Ma|Ridvi!rj@+Wz2+s8MOTtE zJ1sTh0QjATuG|u*Ij_=I0r6$2_H?Ih981m?M*R*=iKPkuDIx6Tig*}$W-DVl3pt87 zv(`?3E=MlFB-hxL-j$ot#cWe_GqW(x#$ySQHQLC)=`ty&kvay}5w_NC3-ur0!0IpO z-yhDmJ$v!qdsCxlMGgWljNqcxedgRHu5g~!Gg<@m5^l4tUPZj1tkM}$+6eDltQ&=C z=|oHL$%|*EMz}Rt4z;tUW-yCshPUe?FfM0Dy1n7>pZ0SmiJ|IDh!fx#+yKKz8P+on zEsQRck*P5{^9ZyjnMuIQQ=_Dvp)#Xr0zp4=6d98Fs_iZ^S|KO;2|?rcthJ~WuJE)Rlc&AA zUQ<>M>r$#sMHK0d7i6F9R+k4kTUCDRRkDwSbi~CfaBwTaRBhCHThNEFF;?b?F_-K* zP8nriX{2qAZcbKiO!==wvderPV#?~c^-X&U!UeeT|oq2`Qd_!f*)4P`_l8Cc6 zB`d!;VL9ITy0iRh3;WH-Py2j$oj(%!@%4{izxktg_1Oz}zX89Ue;q1r8{;syKqRqy zYdTWO0`$;&LSg3fnx)U6)uya^XetN=O3+-ZO^Vum?dDN(k~11m;^cG6aRlLv6^xOh z&AL;*dilLo8@E+`xh%nrx#7Oro-30J6hs|D@q9=#3Ji*}uV!1?7oVv;WA#p?oXchN=@nHY#AO6>)2m9m&yl=t1l?^8c zz+|AdR&Iy{LF~a5It9LJZ`Rt%skaVL1RrzIN06|YTi4^o z%+kn&BIl9P*V}|=2?zr=ogL2DGrlU zvmLApJ`(9sPE>Btq5eX-k7i=rvXK8=(6@Jd}bbz0>^z+4YM zGsU1S$K4em4W$Jl0jlIfck8-pH<^2mQ1F~fO75ej{OY@_(Mw=)U_ z389wh=D=WmW=1)?dh=3)y!y)S1}QmN-EuW}7S!vseQ`S8Qc!vBp?KkRo(&vJ2nySxUyZdR2w+LYx=qyv-*h(!mfleP~SMs@ju}ir3mQ!+7bG0ouL6 zF47u+Bc-KWnO^feTQ|)HBy$d58%&^S#$u3eU)sNM(a^J3^S#OhLD(aBpOfZwh74^) zEc>jnDp>O@jEe4SQcHaA8rlijh?7c?*5{B>(m7)&2&mjW=S5A9;Lu8SNm{*Txble( z8_fB(+nB5C?Q5JWq>Ym|GxSmRmdh(7#gFXL)8gahRCW+*CVUoi^-^t)qD-Sr%~$e3 zmYt+iWQtd!wX#xzBi0tdaE7HcR?o>x-Iy;F3(0NU^|$Ba`m|p^{`3%S_uQ4cotw&k z%<_F_MoU!8;DJGnN}F-QKHb^9QcqJWDwS26GjmjJ%Cf!rXEGT?>t#}>Oxh@Hjk@Tz zQ0{3Yk9PB|5{bEBJ|`I|(mv+|(ScjGU7anavROr??@bUZz?cBt0ltz_%sSKFE3X=O z-xJc!e&KR)DWk3!>RWa*DF@-{phKpWDaT5ulov;5>r6T{_K9mGLu2;aNBX<)ukV7_ zpS^Uq2`2e|%dwngPQ^i&x?_HyqooDl&uBHP!K0e1IhdMx1b%dduV~AFPwB;V6zV>8 z51o$GxD+voNhcrW@TO%rTZ1$*T_k~)aib{yH_df^_Ts%qJwvH%ee0%#L*?6o4D>v! zS#ZPm*$RAr3Y$cak0%7b9^HU!0Gm0ZAe7j#ipZwrOSWep)G$n4M`iS&?hD&XRCaBY zk;oiwAF7dD*rg_mc_1qk&Cnvx&~iyi+c0{K<*W(~daJG8%^wP{i z=%Yt#$vdu#Q&D3^n+!`ZvYqMfkwm5bbVogV{rd9xgTH=!`85Ca5i0h{t9Q>Te0!?= z>e3gE_Z*RudoIC)&m;a-dNF;3rmED4F)QR>y5(Bb9S zx#YF7%(IBKhs!m1+xEoe-Q%{>G|-S3i7ek!Vh$0rkz)#!XVUf;+V|vq(p<5xnH%S8 zT4wDz<2skkc&N-MHFU(DI(m|6!)#K8Q>seYyUjA14@q{6KsdU+TbRe^mwn=)x%}A+ z_b!|;oxldtdP!mBT*24{HQc>qP`O*if^R!JzTRAi$AEU*MfS2fN~SC7;}~8XPiX}L zI-7Zv#J^Y96yr3}`!t37R;A!_k!ZIkq?iSdonnf=yi94*lPM=@CK=S@5Eig9+AeLm zffqb2WN`YC6~IJC=_eDluB|R(CRiHErFFcjv|N`n1EKX?T_WIzM-5WO?K$|LUcbHk zIQstO^Ldnsc=iImhds+9drc|V-9{_ba=`|(w|b6JNm!?bk}iC9q6kgTIkWc@-V;@o zJaB?Z>zQlqUH+_bUiuA{8>fXkoL84X3OTs$PX+`5Uarife>VEd>-J!aFystF_ zjqbkNmNQRIW8@6Dw)C(wmhFuG+;$sTPONqb)?3o5l5Ey;;?$DrSiwZn9=(q!T8eJM zceEYHN`A$vomr)%U9m_{TPe$JI+$sN(k58~Qn6PW6AH@gpzoKq+!%Zagi?@#Hx8Jl zskE}K?X^#`8BB|paIUpA8~K)ms%Ms_#1MBL!WS*@krHWhVVFBv+&J-FNdF|q>dYgvdNM)p^gL~ENg^owPh{ST`G`Cgg+VF&8 zo7OqobPNp+TYPSl)!LYcc>{~HYdf4^m!xqP^?|$CA#rEjXB(cUm7}!ox}kArWlVL( zbgtrPnMPvQy&&22BL`=wGc3z&llS_xSi6;;R0iq=YE|i)UIC*`xMgfe_9q=Gj_K}B z^9R^xUtZ=f@%YpF?A816RR0H0_5c3A{`n$1|MUO(&u^ET(nE7f z@0B2zVlK+tqVZ3At7WeR77uLVaa3o5b`` z?R%cEV?Lq`$!&3aVXCO#(v{8%vIbHJL5mLE*QhzkAABLPVuOq_mS^p0YZi}IJc>3< zcY7--ysinCshq{k6)kLj!YTO_oD)M=*}R>Zx&b3HZl%sKf9<3H{o4`gd)faD$NsNh zA8y3YUcvVuOUz}p1u3zOfsTt^4nyxA($+C_T4b#}0Yfp+MRqipIcV3lUTfZ7p?8fr_E&KRg0F!e3kPWdv&+rf)#w7)k|W)k&SRnufu9nKC_c!*FgERQ%u*=v)$#t zUw{7m>C3m5_;S8J6em1+^=|JtKU}KJWCPSN*i#E8oaa7|%-k+GmACL}R>P#pt}?PR z4kin(e|I(=;OG)db6E3tQdjn%l1R_#J?~Z;W_=r?hL| z<&gVWu5)_ymglJH%#$Q+*$AkVeJ~VN(%z$vYKdZ!)W}YgGUUkeW^HDv+w<&)8VC6P zJ@!d%g7rI?ue2p8J!4{l`-OS*kOd$R=h35#P zY2OZ^$KFQOEytG^3Vd4zofa;FMUFBbL2*?LbPQ_hPBu^4IcBAI-^A|kt~a}c&~n|E z?{=LejSnJmPiQ6GdM%kSM4h9LJ~hwPhe10JzQ#Rt}YB$%KKjvQ}q*0YWA+M?h&smra-ROmJN0KFCd|GruoUQZG4Q4jAI;Yjn_ zYfYyDBpOHifW9b|zLs0Y6vP;t(tO&3@28-CYe8Pyq8i0lB(pw7PUULFF)NW%<1VB_ zPWYfC;Hh+5yCeBQL!cuGo<}4qw{*KTKYe-BrFr(Uy$dT0bA}P}+H4Vd6<~)}D!(33 zT0r5AyO^zL)w)(DoOWFrSnbQSwo0_YFL6ytOa_MM=swbzy9GqgQA_uAM$*g#)7Aoe zvzy!&fB(jc56@n`zj{mmpUV>_-zC-wcqymsWtBQWKOo2}#HTh@}^(c|+Ima-EqIpg&8b@}_eML>At@#F%M>Ack-Nw<*iV@A$G{2kb)ASFi_(alsiWoA zqA3R0+jDO(z2=K$p|$kVPB{V`te$0yCI^LjG(D5domuL65>s=Y{G<_b%-WdT?`l-o z$zwA!)xnWfLA#fMLs&yX#3zj~AJvN)OK!v7|NTE?CLdnkF(5y8{ca0O^?QtI2Gd9` z<_I2(*mBO$Rn_zGv1cw`=;StOd0q83BIc5bs8?)Pt}Vr(BUX0oyc$;Y0dG9*)N61q zD2nVMgO#b9f2~e_^F!}QXp5;g2I;endW>PtHMfpM4}A;MoJO6ELFGXSN9ijYYXjpB zsO~trS5sG$vd1=SoEJr`t&lRT>@2G)fTfMR^)Qu~7&k1p)T}@3Uq0^hY^xG=~V+%CLo|osvK}PbN1$`*HJ1{OUSln&Msh|l*#zE`8v{9 zAWbPtNy}VAVQIs*VM%)lmmD#|?%+&7& z9?#d8^X1E9P{gyB?!9pE5dOc`lCE9~-G;t)m});!)|qQrD_23>E`?d{eX7;Oy->E- zq|)0OeCv#HCNP>;GC+D=dCh(LZg!a8YfJc2lHx73a>A+ic+rwa+G`xx2|H&n9M;*eR|KHK(affhn)8S8wVD8+MuV^%<>YzI31pH!+;nYYH1d0ax@i& zfv-4t+{*oa`}*}wYVzo;^yHPhpUL>X``Td3--X7%!XTfII0l3I_9bm2Y4hA$ zIPMnHMOv(rOhE}zK?YR*@2Rv#RCd&o&Wa+M_aPV>6S$Em<8)!k+i9(i-8z*y3P4M{ zP)VJ6B_QB=&z)K@BX@gN`XBM>!-r3Qe))3t>zA`0-fy10f_GJj`r{ZpvuGO|S+DlD zetRvmh+`nNrKPPlF%eY2$dDojOgf*#T=K3v8r3pzRNz%S?Xs2)OS8@Bnc=omPiL#t zJudc4UPj)o)~>hdmVS|p%H-D8OVQCs&E=rZ?5#Gpnd{o2Wl&1+)!dXujdGC6E9-J8 zO)}=;wH5eX**knipM7koO?Yf)?ojTB+L}8CuPp%PefwyC^B4c{-ud^*3-?|fB8h=+ zw7eo!>Sw!q>+Uip!&!jEi4l)6<$xde$^doA3FG3$+vzP7u zI`h_egKKkYH;p9LyDafNNnMoU$3UJ;T2r$%Yv`MkWHf^)D$c>zI?Z;{h)rvEMIx`4 zbifKEt$VdhqAQtO+s#THurMl@H~t&92j3cOUX=P)*JLB|k#ka3Ke^G7ky)_721)|G(6|Td!P6a-|7Ow^SEZNi(Ac1{k0Lq2DQ(n_tWgnCZXLFtoA5h@~%UIY0eNKjQK=@GHFyZKt**Bi=o+>ob^wAJ8?c6=$I|G|H8h=VDN zs}r6be3Wa6u-yg^0I)z$zw!2E`g;H&{Fl$KA0J(&K6~wMFK50d3N3c7tDmGnKwpQU zqBkbq&w3%syhRJ1hVbmNgx^~*Yi;N36X^)KjgBE@YZ4&V&gy~ZWlyNGW(}Y1>|GnN zXCRfOLSc}&i|EU)fz;ozVFOpBdmjWnW&(X2(C#3?Zk1zQNd z_H_oB(xPwz6|Dg`mRsS@qB9bGLyYmYenTp{Z0sDDZWT-l>~)4G^9Iuz~vA=>v+ zB5+f-c9F}_1z5ZuDAtY6?Wd{&$;d>+v)KV1mSyZP%t`Tc+$WbvEKT@=xf&%Z^&Rb{ zb%EGJp;9|XCD$=1a3hZyKO-rN6a%{%e^agt%iT4H_IO0#X8zE7#D&h0Y;(@8T4Vt)SxR8L|0wqM8j*kq$ zudl%?>`zeX2=4ZKYzBBSf}p-7?qlPYY~FTP*RVRJL3RKfYSA|bAQ?OQ!H^(vbeJqqbr7Wa};c)0fFgGxSa*J6XsH|)9A#3On&Hzb4w<2ON$FHv{vty2Ofk%KoG(0OF+vL^gBF#0rFYTFRx>Ig*~ znRnJ>Q19MkeLQ>ZZYTQRAHdD~#hM=4!rK{g`0_FZDDHL?c`RR4xEn~^7C^*}zko3+ zwtMXCBjJa!Sg-~4LNgeR5#lxE_|EQHIV}emt{pdBvk|-kbeCk=c!;%w0^r#P71g~a zjC+j`ykEzm_PEeV%;fNq!xWWNQw$rRGu;jRB^F9s!MsmH+cOESH@*~@nigZP%`W(PH*R&Ty)vK&Km&bIYl zL>$W~<8Tu%%;1LC0&rTaWp!-FiZIQYi6}MpDUfy?B>!NGKO*z576*PQ+=9!8(m$;s`1i@&8?$GJp0!kBJ-+ESKyZ_whNzaTW0RWBuK=St|2KTcu~O;O!Q8e+Ou7oYMPcx?f{n zVrLw|wyp`%zs98u&B1*`SSBX9h6+fZ8_#$A1vaC|UdxGk2V1r8qr2-!FmLzj;LRyI zihIOvw0LJgcwo0%rC(VF;@PWrSHS4sp2H`zPa4oePIwO?ro%;vU4gYNsY{!T3hYKO zg(ltTr%|76;xM&bF--wzV;cOH*snItJ=Zj8LkWIZMOz+qp>k@AFPp&Vxo)%i?Z6jxwkcjZyQuVb0!453$|G@ zuWQSRL(gu_b}85(h0w(9$>#6={i^)o4*1E7_tsO`&Q1)M4Z*x2I8LZn+m|h|p8yoM!Qb_gGPVe~Bcg2HqP3Cp<*+cFEGzA%&vn)+#p&_KK0 zE#dLX!+AqbxplHR?4=`l;${Lwn!qQH;P*H+cDCa%A@9*noTk_=3KY5rWnTCKhf&ms z25rG)Eo83~2N2j$8p6{Nz~P^q=eDf+|9<-T`ucL?_`A#}4@VMDUdy+RuE;$us3C_a z(yG%=AKZa3#=9e@GO~N52rjPH8Z&CqyOWU+uBFl9VI*`QGTXCP^+CY{-7nlfogO%V z)x>aiN=Fl0K%6?z0N?G1dm(e5GXf#K0|)sw0;uqMVyckhhc~iqo}dWqhCRh>WIaG% zfEl^9UZHguMmA_6#jMV%j?(vmP?up$0Y@Ekf#H+ACAZtp7|khwpxpC)y`e#uyO018+G1rs$F(qlj}1;AQeu9+NlE&D-I528#N+m zctY&@*LN+LH;&*u29AmcWHXBAo&!C3@`^{8FMRgNk>$>L?uoN6`@9ZE10@3DHExU%0E3nQ0? zU$plQenbcK*_c<-SP*%R#E)v)iGag)H!aI9w{Dw%{Bg{A7xu+ozkK}s_`vhrMf~eu z@BXnfZgaa4k!=MGewm$Z&|^(u1M!kO+a7|#O2AbJn(s!r)bJ=2TBhAL&uDh2+CHl*Xx1hUX$XwrDjV@2K_Dpm>DqaB zi4eRQwybe979Nr5MGKSl?Q*6KI%wl^M<0-H&#$!2c*9jR+eSK8ht7_{ADV5D8|qOW z&=2IG%LLwgAG?A0%WMuXJ*YjCE-y~>-Y1HIzBHmOb-0`atWw@>1M+_6@S$xod%yEg z`R9+XukT(z*}pz4I6istZr`xqJydOC7*3jNi+XDck@8qP2hR5Z*Xy9mD6u-GnPAWX zB*G0r$%Kdo_TtWTkjQGf;D7+Y1Q(5D)Zo~%nmY-FOiKJe;N*r<=R|2pZGj4_g~>R&PE}#F)$Ah(V-f?~PzF35!@!bI^>EI|JLapdzMR zbH}oUpEIo;gEVf362FHj<4yejv)Aq|L%j#@+~voVF#}(inAn(G{c9sXus@?1Ii zGe@Gpu~b=k7i-~M+4MFQ@yDNj`Pn|a`wHQIBMki1<$DXYw1=rDV(|l~UW7Bu5H&!> zj2e80NLnzc8!dAbH3d-fl*d3scbei36 zJR2agJN;@)a~+d%OUKZ^@im$0SB)6a%2DhCq1y&uAoNY72yWp>p9y%hOj$gxtV@!0 zSM+g0G8`Io#sx*RA#GWyWP zU60`HO@yz>{tga`&4q9kpFoe+&djdC49hxVV$Iv^gK$BNQZxZ$edc5}?Hq`g%{>rX zaIkU@SKMk9w5PUoz= zZuo4*ijAMfcH^t50~kJzfusu!)&LWh7GC7*?o<8n>1WiZ-hHx%mvhfvz5ATu*RAg& zC5)C6Z}(V21u*998{`rAoN%Y9jLY3MOM3zezX&H}&s>axR-H3&wb_ZcexwtM3`fCSU3^#0Ph%;F>|Dp zM+duxZhxhDNv2>sytoK!3efosO*<02L3`j(BC!h+KQ0Scq8F}p2o}9*K(;hO(6q1g zEwvh8FOI0ct#JV8N3WE)!I``cfxnz0DSo?A`p2(1mwLe``yv1J{mX|(zu0Fl;@ha_ zQ7BFyn1pe^40JZkm;id>a<>AvO0kfZA34ls3}}rU$#EOC z1dxikwPS-n4~8PX8CUgc$V{MFMbpS^%@8H;GK!uSsR4FZp7xS-hp zjt%-|nb`>UOmnn}Zb*%S5~!C@rUR)=r!;j9ybd;?iztmG93E}X)Ap#CVS!UuCV&b& zn+yoT@9%9kTKMBAd$+xyGhILz4I52o!*vJR=XwU3qC;Y3B9@;h>@GnD(KAkmoVP4# zF@Yeb<65ZemKC#sRWVcuS2s)uAkR?6O5aNBK@#}W=X`yAmw(O=5AzYvUcfiI$%^=F zo3?~&iVr`f!}s1H*gs~>>JwEySl=;MWs-^8rk>b*?&bUJCNukp3H1NL)%E3zh(v$^ z#xv1Vt&Oo~$GDny!%mi?-QKby!qCyV!0|&zWItnAjjuS$X_Ez^?UAylN^Wmc1({B0 zF%<~sYAdvO8$MJr+lPCzW(8~pP7N?=E3A7MxiY9@ofo3t(Bpo;!ug&5WG^28GWqjhb`Jy@ZKSAS+ODv^9mKWeYXtgKEj%j7pjWzLtjZ zS%(#G7mdT`D);qELyoU28Bvm;A_UVrWAh)nL|yuA?j?QffecgH7%KaW1c%coM{y!O zf|KIJzn;*k@u{{ZbaQJSk3{uXKmY}1X_Eolo>0Iarz+G}4+$jp9hX4W3MlDg3~LlP zlW%^ozxj|~ezw<#ma!)<;agj$)G>4!K$k|)f36kh;BpfugSs$(sQQio{c>^W;@G<{ zKvHPnP^jpEkIn70jgugv2;9(d0h_L7+4Akfq8yoZyf&g;e|pW^!wyg^))P=pgX4RP z)50g3I|`>xu$f{vZ5hLn+Qz&|)|uUp?Lb0t!!Hj5JetV}cat(*y1t`*32-?51ewQb zjN97|jHyLG&i~Q1>wk(5kDkWQUcvjP@i()A^YN~*xx?Ixj6jQQdm+TiGSInW%OSHX zL6hi>ai+pI%BG$H6+Fl{_)TE~h|$h~DhoxI4Uo0ZlYH1MbhN(eSd+*!{ z13aK8lzAtg(nIJYQeHr!fNmSY@c5q3gn)>dT%|77w!-);K|_D`mCYGJ&Jg@ zYC2Q~K-GAAu?0x1edofQ6YvU$sF`ITOu3M1SfL;V)|NTR#hcc`EzI@fu(o{(p!9{u z54AOKKh0=`s^FR8A)4MBAPu;kJLjNf#&{P3XNW7!#Q0`o zmeEH)dOLCY+c)XY&tA9tTe+`~-fGcuh)CZni9{RF+2C#{qCO6#x~!{4sE`xdblPdP z6NQ1vT`hxh0n#i4mO5|2(Y!h%#HqU{CZ@w-6%NhZ;9(Vt^C+6#j)ZGvPr2~NHl91LcA)Y`>oGxmvw+jKk%JMY-pYN?2~F1!lA*}+N!he-fLKwdbl z_jUSY&w+p3dF&~wmwMFIc=po0l^~r|Fu1OsE-RYFQbdc@Pyt2w+}C2qWFU;;;_hH} z7Eo<42XqvX6rm}^FBHw8?lVU5<`97Y-IJHh4o5p$W6ll{$O)oDd`lB(r$J>r@Qoit zeT+uBmo&$(YYoiaWPs!yF?+|7vIHdBBQhxtDX=yU=LvEx>u{IAppCnn0-H&aS8PWU z7+!gIq>(3kUqrWwh(F-+`~{`fFAodo&tARzPxb34VnR)Yfr$CUeXIz`*8~|KBR{9v zykYcugmMFVRJ&m8s-q!IadwJv0OO#MyA#n82V!arG3s~@H9vTjjWe4PemtYqbQsUp z?TpECb!gDwRj6g`D(J;Iq4=M~RtqVCqeHd<{a7bf4d`wlP{R&$4#nSiJ3^aN2)ML? zK@!w*p@hEd0)P#8Gem}Y>bIkazy0*quk_jL_SUadAoumNXxE+%cRw|0;R=2_ zNdLuCk5=Q;Ha608Em|0#x0E#(61G6_RrKDPbVWm42a4BcI1QVatsi2%?E{5+x!6{~ zrS773`+3d?!|n)1CW}_P)&cMg8DY|zb4OU^ln&G+wMc7*zbW3Kq$6}rU@CdxwnK75 zP2J`YM%-nAHK>FvDJ!CE6oFAK*+B91?As~-KYTYjzI}E6>;=3X2Cwgx*4?*S7NFR2 zb~$X?2xdZ0RufyoD{ONa2uC35XA^gUHe<&GBpYZiW zOh58<@G9c~)2MWpbD2&PjK9X|lqg5dgr|1RwOc9(%^?Sg_N9*0Ky__Urj5F|o`Q4( zCN5OZ$E!Dnvuh)A1K1|1;lh}mj68#wgB1;6 zDFVomdem;$SrDhqJ2qN_`fajpvgT2~cgOu=RWrzW7+m8LuZ8KFa&{j330?b24b6kgzr+t=5B zOM;xet%+LGGU5m-fof;PK1m=<5)IM=l-mX{|5k=Q1y?h194|}b)FER=i?!RLqg)67 zOoroo>GX*+Plp`QXvHA{om6+?mIfWNabfQJGF!DxH|Q=CRqj}8?_pQ+fRF*4C(j*A z;E(mo2mkW&@x#0G^5Ib!_}R;M`%?X$hhW5QNO0-Vw&+!@8*`VO#;Y%H>$7)Q0UWZKG=`*y596@pa& z-$E)i_M+I=sco+YPAntjO~+|kA(Y=&C+v?AAa1iz!;fV(E)Lb~%z^pNG2Uq1cwS8# zYl0-y$q5LSX~s5Bw84KUPdI?Iej0AaG*Dcwq&$v56pbSBrtr_X=z%dGcvf;K5ApsByy| z0#e#2InXIO3=+FX*Jz`A1%kA0TsaUW8c6RmG8UJ;AZNq3LT`t@{|{P@*W>q{efsqN zFYkWJ_n#iawVu6@Z=G;f!`P8+pKbwup7CH5v|wp7#HD-!!5}$jTM$djS?H@NTKgzG zY!VfxFi{ zaT#w~0*In<9Y>AJq~Uy(vZ3<;liI3A0O4_ZcOMX@Mend!ALhWeyyN=V?fTCBAnIe@7>KomTxZ%uRfxgb}bys|R%`fkMY>nUNhd(_`e?NN> z??2qHo8t}qXBV`CPbZt)eN8!e0ttf!s_`5!iQ0%z!4@*&%nH)6UYL)<$cy;m-<81}148jKAC8EV3$qWz|7uA7h*gq!57mu0V$s5gJ- z!uq=Ud28%J&Xq^^@wxMa!P9-lz)vRXF^QzH179cCT*uQ!u0( z6gWH#Unp<21&03SuG7|zz?pa6X~zBrw>banQ9A9(%XYst{+4t}IVZ~)AZ*zrmP!jk zJKWl?c9zAFLprwQk^&hN<#?w+{!*5n%!AZA8n?KD3LhP0EIqRO6bh-b(Zf8v>WsdU!*9 z5}i;m=&a4&PSqGKN|2DpeRa-(xax_?RdK8}D(FV9fkxA@-8-(-`=tQ@soYd4`1H>{4sucSkHL&^1baVYISNJ z9p}IaGXkOU(bn7@cx9osDmVgz6T{@D!E-mkhzy1^wxOfB4QyPhbM>o~BY@2^@&%OCvF@Q+_RQD>?U+*2bydK-xNoUb3>|2f~)=Z}x> zS)aXnZ%H$}!LUI?XV9G41SEOfg-}L6=Q?w3;x=h@YPcLG+!Sp^QAmxeb+{$ZRBC>% zR*STC;9LwV$YnZa1T}%VCadIR$8a5Ij#am3)s^ORIegMy;97&NOZfewQq{=|1`JOh z2R#`8S=9Q*ytj8VZi~~FM5~%G>k=dM6S{Ijr?^hwKZ09=;9P#1oB*_`#$sizna(=Ah_NQ!{6Z%RY0#Rol`5f8RETC*X;E8f7!;yF)q00sBaY z4d-^W^m_ol-;_~3d+lz2t3N(daNr#^QZx+h)M07;6WZ5t89~P*dy>f3w_6xUO!x9E}wDBxj?%Lo9wK&wYA+RZ7EiB(XElED>IX}e|d znj!#)k251uoKtNk=z5?~ZOazehG7m+y?5Wehc=9PRJSfZQm!pj|LkrvE@EtwClIj;VvLOD!0 zQ$RlK9M+}E08ZE4x%x3U4miBoz_(cG+5x0qo#6DuVcKw+c6T4Q5L{_TR={E)#jxrI z_DL8ZZPvn%Q%Su;>64(P?J_%u&G(7j4ie(LCyp0jq#1=Q?Nf1jjB=Zca1qvcj_FBw zv1uuv@gv6n-~Q&<$@f3RV;=*j9D9g(dG-q4qwv0Moz^J4F6tDggpksr+3|n*%xEm9 z006>$Rj}(mEBD#hdu!`*$d(1*y@QHR&&3(Qr+7f6HPa5d614|ZL123b&KL5HEJn98 z37=AZLN+{PYNMmA0jvs3Yjr3k7A}_w0VhZ&d^@sAaC)KJ&9Xj~G{>$q}V3yL38J(uJ@lY`!Le;uU4SfDQ+kbFBU2Vrpbbh5 zAapQ!ymu4ie}m9yIu?n1K`1rByR9oj>fl3*SB)rVSz8TZ+<6+w-N^s{0_ElPoqdRR z{_*`UKR;}@K6?r8Ly7C_vl$^ifngG(8N3tLj5#NGU*NMD23xp4)Iy4nw&-lk*Ys3cF4eY~FXi*-5j7{H4%KJZJDPBqC*Di8j1*fHL5v!+ zgwrVYFb0rak0XG8a12^Sn%pPeL@j+A4Ysk+8iY!bC=mu9ee>!&Bxqu2$AdvpZ`gJx z0jC6($Q@1iw_vEf`=9wJ{qpRUd&@*tpl>vRqig5&i?|wQ5Ywvni;CdcVw!_T$LRdP zFw|zt4n)$awJ{oKIBTkBC~$shXHrQ5$KoS_sh_xs^5&2sm>-`)L-h9WvuYU4jC0XG z$JhsvEd;#b$U7%c#ql^O2GV7DFPpguCq?5W(MyKUL$mO&X)}R1I&vJth=q?9DU;}; z4#Oa3dm%K;#tc2TbK>9r{POdQzpF>U*=MiZTNKNnvq;d;s@A>|=aZ0k#AXCr4OH|u z>+u17W<>J<>8oE9N&JuCD}ZtgCow& z+e50JA+-ygi#OsWOxVe9zYflWy&ZFgQ1}#gT>3A9eG3FYQhnP zFs{u@>l#H!N}S?Ycnsqc@L?9RhhVP2t@dVoZ^xlEZ?kIkv6f{qECd_%)!9fU z?gy5G;lxnX;m(IzA=yIsuegrW>3R{D&I9E+OU;G^cNEq`wuh=j>oc}+2{cbN|zwd-`4(<%DBe6{D9GhV>^nKY+QSnw2^Flv99iz=Y#Mc-H zT_~{t_878}Sa2FlEIPM6M-<|@scKWv(!Y6qH()uuJ^biZ*Tpa2 z+md$7T&3@s9o>TJo~;LatNDxC2`h{tselujV9$fZ*@gTv<_bXGSy0}S9Z3uP}%yjeHwvNjHeoR@ik z%gbZJ$pbFOuv_)QukN+_?DhNWAFKZJ_?{^R4h9A~a&lAfZ4zwbiSIs!su$+i2TmMK z_1I>HO`Jv4OCb43-Hvd5U&>c>41zu$=$C-GQfR8RHaEgpW$v;JVd?ATc`N3{HxmhA zC@|N!x@18p^B!-kf(-=fsiQ-v4B9-ibHBg`X_)wAZ>~(wVs%|Zl7y+7bB{6^t7SPlVYZGyxq4~9` z0%tIv9-h#iai10|qgM|!Gzmj$Vrw-6f?9XVX5Vk9)v;#(0tLnyte2`nP*Hh?Ie z3%)J$JyB>qq2rJjt~RXZn7!6m+g40KyTMvsbPC911o>nv5LR&gId=}Sy*5UxgFz-u zQ0iv*XyJ~dZIxD?)QG8yxb`i$=l3tK@ABWiyg?dx_S)S~A->(>^sMV5+H$m`ZABiQ zB}e&!8Zj&m287_+XAWc^QUA!jF^g|wR93hj(8(hl6qex!B+zB2gM(kE=Z0OHiS(R_ zb7d^prH~`I%OAQN@ZP}J?cE`B!pb#lcLfaXQ^$4z6zzm)+0uP>TEh)$1L{#X3Obla zL{2=Z021#QAr-WA6tMdGtVZ2Zqc`HD+<08C+t2h5z*l~L_acQ~fXaRR8<` z|4;Z_`Jev3fBN^i;b;Ul!*aMi5~i=U2Y}i8)G);ARv)w5^4bI0I@TPsg%o1i3OAG*2H}bJFyZ*0o89#GuZC7X@4Ga>q^3*BEsL$%S=fy9Wb4}70j7z73x6C6q83LV7ueTdga@zu~mA{seyPj|G5 zG9KoR_pH(AewJrCr0Nb0`)z9YcgJ3Hjd%a@@R0N5rMn#&_8&jh>ifW5%!|wqx1|=F z+qw+1o$>DO_|9*n>soSNSk(^WX4p6r^$>+9FPoE%8o`3Rna;kUdtL_wg(_@QAkiCY z0r#CjjC=c$!oo?cqA}+ldoIqTUd1GIT_|IaOVEnd;L<*+TwDiII_;f`ueaGehEqdrKQKb7n@Ti%KbvnqlqcITY)Md_0$>3Z zjD%pM5AgB{I&sz2QG_`iB@VxAeZg*gI?89uYT~0wG3-G8`UCx(zr4QGqnp)dFWg%; z&yKr5Xu5}Pp1Z>!opiBiHuZ&s<0|;vY&2Fyn{ot(9ce5IsncX+EDC~3Vz%s^| zz3(=2Vvrs{t?YJO@z}%vXZ4M!cnPBuJQ*X5DU)y8@ ze}V?>I(GBX=G7ZLwJxQ*jl>BAIal=1f-E2tnwWypQNgQ`)=God?{@rq1R>GU5%` zcn!TxnjP{@5LxavzF%J6zl;3zIo%$z@t(bYZ)Hg_FOBHb36vn4by z1fRVj#6aoEdkjrh4*csf(0-ID8Xd=YA43iPAEe5fF?08gi9(=0Squ6FOxWoN@&kIL z8cfz)FsCxm_=(UTurNSua0h0Cp9=LcW2wZK!g zk7Yv@KxNO{>4RY6$CuP{Zu1D#%pAz1(H3e*+st{5g@Iv;k~{b8l;}qxfVVn3`Z{I0 zuyO4bEs2Xj$E@^KR;y7TIh8ybjm8zBb7N3`d$Ib5uRhPu_Wpgoe@Om#?&{q?h4t&N zHHjt+57Dwa==4ZAwltXG1!k|9&E!H*L)FqxHxS;U0fdE{Bi#13F~QcEIB=IuD(E-Q zEGDbf)rdjJ;!&aan&IVmy6W*e%R=F)7z+agLb6$cHsGNm3x9X)0H=y63mx+vCFbo? z#{;IY@r%S`SxnDTfFPFJaq6=W1#2i+Fd?S^!w4db`0dV?;z~2`0PcwPzrK8VI8b`_ z(!CWgq_E45HvuaWJwYeWK7!yKNK~78ng9`sz2%BQ8<=qzS*qdiAwf7UKv6` zZ8r}u0odpu{nS}OW-J4`ItzX*BM;y~<4pJ52YDS}H3#`G!3du=dXk=9eYb`p zWscz-Q|SQsJ;*z33({9_bHsr+dl&M9q1^u2 zi+BH_ev1VUnFGc`Z(oh^vl;6aR9P@pGiXkI&$d_;xFdIf{+5TSJ`7cE^~XU_5Dawt>8Ct63e{ zqYIl?eIgvd0}j)E0;ZC}gmKKqv87bTBwYCbX+tl7 zBRhsQ6)8v1@jsCC(AdF4Yo*MqS>6W(m|WH{SZ@kx{q39ydKedzbfq;T6@VAsGtN*l zxC$^&>+K}SEJddYgRPM)7`ASn?YLX)X278t6p=I=EkKq9&t5=5uhRjK0$u|{$wg>} zyY<^i@ZZ(zKYvbp|AyZF*^BoU=f%ws54VD=c;kM#8EH$%KcY=(1Wc~91IATb0FWt^ z9+eHsLfvg2rbP-^gQ_?M%Lbnh)lE(ZU4MZ0$K(@z>#IWUrgP#&di$ZSF$6Oan_s2l9dnQDKp_PhUPQECWYH(H02ia5((sjSm4y!wc`6%}yJc`a6}8 z6dI*##LC&7Rvkfe2*Zhv*COu@9?EH@)?%P97(DwxFKKT~9*-D)1jzYEnjJJ)a{5?< zgobNw>6UoR;dR`k`zZLubIENh?zb-=e#*};54jP~Ub*j|=-*s3h_BCFON9TWiS?@m zC>^K2(S_TY&N*z^hA?Ojoq1g06$%-r+JI(S_vOaTlpN0R0&hRl_}aTP-ni?=2#sJ8 zfvRWd9JImBOtssiN3q z73v3e5kJV0gw2DxdJnJMHYb`bI3R1;YBk2TF()l*4dZgD&1;Ad5}r|@bKu~x@!IE} ziBzroH5JH-?hla6*vv2`BnWaBDlA_hV^qiU)Maf~%u7M87lWQC*1-NYQXy)^pX6w( zOa7f#|_v1N<^YkFPm`=Dphg(N=+@5Cs^T!YVP-Fk( zRlC0)|F$VA;M=U#9J%=@jN4`#d#p%UZW#_43FN3+G%aAJ8GlB&2vx0HX=BvS;DFUs zy!A7$*MBqKK$7eMPuRLRsM}hzV5dMl{&wylL$i*1tvTbwi423Q$2&+TAd*oWAA&@O zt0T6Ov{zr-2Ybvcxgz&HoZn zsxPna?7V(_|I5RX{%%9Lv3MjRU;322{~$-Up|*QovCJaY8+fLCoWMjP%HLxhim?XSkMYTqVK= zHW1QnknP>_f&Kl*4-ao>p1f>txd3;yc>wBKF#u<6G#S^_ zuCKQCVIqPQj}(I%y7v~y+YcUGZT2X5u5EP(avy3Eml9mdtY$QQ88q_yz(UnCCXCwJ z=Awk8X2Csen+=<)+t|a$5BcTgA>`xP3wPUj`+gjiHlR;(pf&KC=7sAZH*|M5^iJ7N zDFKtR=IpaWw=;IMq8xKKJ~80aXX>6 zTO;+J0n{5OR4y(wW^cQ%2ixaCNW_QWnq=>W%_UC04HW7PG_}vj@NIo*hp8)Y(5`HKKry;UF)FA{VRFn}$-F~dueSqpX#>_bqj#7A~*Pgq8^bnmMa9$L5 zxN(n-gLx34-n%doh3&^zcJVUs|IXLIa89yQ8zOnlDT~jHYb-mCk6oU=*6g>Lv)^LS zTkq{p534lKUAedJ+js$OsRIRvt49?KP!nzGIM*U@Ea(i<>_%`W3IY|(ML-^L2SF%? z^=s4-1haG-Zlt}j;ijaA!=qPp&D%6RI`?TDImK z@xz|*-~Q&yUq0pQ_vl%CczyTD{D0=7-|Dkh@bFRU>@Nz!z9I*uwaPxW^ z^nM}YhQZDa+&^;5vW9!Z*Ddo*+}tmyvQSI|v!P>FlOe7QFErQ|4Hnupqiwa`L4|?{ zbz8f2u_|0!&9q@>I5aL4L(@PZwkV-dD2nhn$4F{7KU zqcRXH7^KT#U^_((JZ0wCu=oW7bt>-TE>8F#ex}b}yZg`dN9^oGLrGUtSPI(+sGbT_ zxN_a7afon(V|bD|>O53)5@8DlH@9u?(ah+8KBhKpl%da0Q96*AR~v?#36$HX&6P8% z_QC-7HkU6JH37ehg^dF|;L?z?E7^)#6Nw#I=QGf@Z$KAqxT5XM)~3&P&T?#US#wXr zJ}D9&r!!mCfXwN#;cUUfU^QF`L>qDt^1Pi1{s#4#_n&`xoHu*w!o7t)%VO`ymd>=k zND*{DlannDrBUrxDPA=$wffiuzhp}=jc3MQEl0P5dkq>kG84t5-N3b2&XB_Jn6r23 z*u(c_JE)a9W-4)R`2e&+%&ZCO7M+B**m(5dyAb!McmL~`{N>SU=GhDP*B|Kq zk#SHA61Qex_rcH&?*VzK^aHRdA=wqE`_8t<=ArYj;tALn4>XWkUrk1i4G+h{Yn?}I z@G()g1FN|())7?Fz`v)7G_$QhO`LC2`MYNAag@D-K9wUEGMwn&>uh<2xW>>k9H0k* zVG0V=9Ko>!SY%Jc?-#>FLW>Ff1ik#3aY+0u9keQdQd_x|iRI!uLYA4g74m=h^!ekT zKIiM}1uT3xynprrzBNX|Exh6M;0Y~(iZchG*_fB^83XnnZ;8hB+_>e91&i}GvpKM+ z5RErDWLJ_ML^t|W-)l_LOA9{=L?{RCZBK07QAOkiK0~{`VEc7RPoBMa_tKMZ%;ziD z)W8ZM#Xrk~fd(P>u{ZM`F{^avkVWLE*k94||4rSyEL)c2XnH1@`mUBqrisin>l#NI zK!O0+dJDY)abcCKGSj0yA}f2OfgVAZ_m%z2I?cTd) z&wXJ(8mJSzq-6aPHLLUU`Iqu$@BI{C2OZ>BrOnNp7iPMNOflZ<0|321LccdBLgJ#DD46GLE`XWK28b3SI1h{M4x1?n0Kt>R|J&C`(SUN$x950 zyv&=;dj)SKXhh<0CvJd{f(7m}guuN5)d%V*b|^K>?w&IpGxTr(JrS=0ey|n?#{ZId z=Y-T?=Y22(P~1#)eBHwX>WOut#qO&P&EJ3i@h!jkdq1^rr3Y~^D{qV`#2|REG?I3P zMvuhA5#aPd(N-LpBNK=P!1Y8kanFL+thS)3J)pju z#~7}y!r*4!M6TG3ofd7V)e*K)+B4o>MeMsG1*8mr+zH57ZU=5%*V-j&=viRWrMJ@amI+(!I#4uVsS&$&R) zL-KNnV)u27j=%g$k2}Djfy@Gq%7%*tMM&ddY#MP8VVM;Q-UYbW1mgMxh-f1dFKxIO z64Q>MHHv+bMr<8$E)dw)@Va@0^Cz2FM8hgr)meABL2m5k9{xgs(ARsNs(%4!P9tx9a1g7V_ zAe4jYV0)t+imjF5vo$%duCv%64=}0an^!qf&6kSc)m?M07*ke|+$aI(*%dn)KeJ@a zd2Hff%yJCnxasVvjin=boy8X%|dWb>_MG@}>Jf{QUVVJNBD%$?yIA zzGZvdt#|4fnEnh5-x=tSvJ-mIC8&l4%I^1IUJK*YE1=x5dlPxbfxg(_iig_;e#|bZ zX~W~P4MALBF2Jc#ZgX$JBsGL#bz;cNE;{m70icb!W9Dzi8KlOz(Pgf2ed>-aS5^#5 zgr7USRdd=9!59w7+`9sSe_8mh*AC~2J1iKiDKHVcfnK-)KCFiap2$zXsyqD$(3ZXp zTYB$@_s_o6|8xCe{0bW#G1?as20!oa(7gw8TMA_vCY81dF8W@wG8sh@k~Jo_uz^O= z6RfV8nCk01P&MYbmt>)en~jJq5JMEm92IXKB4)#?biCYvRVcyXDCR1M(~?rp#eW_H ziD=2l+-Pqt9Euz6+C&`&5?*AS3hc9kb{&l#WHQ@(Dm+1nsbfu>)M#$ExMpgai0Drp|W2Xq5RpJ_~2 zCO<>njZQ5<;&FwLjr1SM!4Rpc2PS{Z+g&6i$61IY-8|RXCOBW$H=}FTUSh8z64Ns& zCC`C0ZCklUTYyf8nsHwT0?W0>Q}5mL1jbff zT+m~1;FcM=CNVOo*OXpHB>weZznmX`e5)|=-p}oy1%ZD_jSj?ma7EM@+aVUm|5nDD zei{wEt!@I*yF%-J^72#c9^5WAX|_0025xXo9JIhUl&alNxB;j8)koD(*&8d?+Pab3 zAQ69AlepL6opIELE~Gjc#4&PD z&5_`*V!5EY1%nI}EBG(gbk0)RlGKiYg5iD~(OlPv0fOAoc^hf+o2UI$uF2x=gp)T4 z3mX#X{S^EN^rQen^5wQm=lL~_Av6muH#rzP7CI1nKajXR`I3N(JN8f@#i|iv(~0!G z7p6OVRP!Y!kk7R>3fG`z*xoF6jz`UVK`(a*KmUFI760>F zZ2!j}!1~Cy7%uPp9ACrGeqlmH8){RCbv4bgeWUOQJjD>jm>wZyt4Cbn&Pw1l5ZUX; zR~v}_t>-Kn3gUKY!5s=K%pK!uv4VV#2rfp8;YV}9SU3pRC9eukcF)PRJ+Kd>IM=`j zdij-tdKtK)D-Lb=U|#rr>dd8^h9g+-^XALM;s5;iU(S#J@L&G;!>2z1;r#=6E^mFg z@B9#d{c``G|K^`Qefjw>=a2sxOQcv1A1PTqmp}sK7ab=K|5bJT<*oSRdq1|<3kyL4 zjN1-W+mSWntBw2QSVvm7`*1}2^}>?|Y?K+tT4SQGQw_8_%C1;JB0&$yFfisy+%*y7 zT#TUDz!q%v6$FD|E}FB}fA>rE^jAhb=-K*AccVT>z~L{K=&_Nx?=8bI2SAA}8}{2H zepIx3t-WE;Z8>!~c%|!{Q3ZHG=K{x@x#CIL&;|!6&?VgNXk6i(+xD{3_Ps2u_kL`z z7na?H3@G6%KmHu5nRp)1@YKOU#H3Z=77xfjr?gBzBIhe^tlRI`F2`tv-5k6hWa3uOos0J2SE%&IS!bW^8$?;JiT@62k}2+I4;172}Lr zXHB#gF7a~09BE;oM-jlhd-Qp^urS}StB5Jhvg7eQ%hiqnnbN#g44Q?nyJdl~Y_v@f z1Z>>ea1O0IjlEp6pRP<5l(PLY5tYJp=QDqGLH6FU z1n5XeY2owKOFR`FTS8>`>C;)s(c)tR-L6fP;VjAG&fHbU5Q8nsQc^`b4m^ z=Kxex0ouOwDHp;~pT6{$-$IOEKL6>*H?wZ<{RH3Gys`+h1;C<=sXQiuIn#AP zq=J4>wBwq#*PRPXWK;9tQ*+*t0H(_c+DG^hL_zJ4$wHOt2zg-<7pw=vM9Q|q^9Xq< zHsfE{nEgS14SfKnh3*y5N_+4HB;uJ@!sVg}C7|?FLp`F1x8AsPZzF7j*3eptUIO|H zaoxa=87i=t*n`x$5B2{U^gkCY%W(ikJ1hZ6&dUhT2DKw_k-@k>iji}WU_ODLfiMKs z3n44_yXu+J^fj>`MbxG^vlK8+yt2j?kSicCwW>{|pqPxj=;Q%mpN~840pg1GImO>v zWB)e)q4OW(^M8F4L-W3m@bx0QEVb<79)R=qfa?>XzHAIla*t?R%7#HX3@LW(Mpa|^ z+IZ`ZQHRnR0NB-g+x616Q@Y^lExH)@Mz^I4Cem!xl#% zOA6qN87q_zP_pw8!%qC`g&MEHUWr_l?Ou>XlxXen>A_1GW$;b7i2-VC(q;=Jek5zc zTwrv)JXeC@-n#YW)p2cvuaY2Jo7*|}SORv;!xqntm9eMDQt9l2tD>Odeq#~m?VRa) zfs|Xv*FtcEYN9;_K8ImKVvKpt0i_-zKf#Z> z#@27B$^!rC;RW6^1{=bDIu-3ro&yYNjE8{`&hwI9%(6h)wPpJh=_BB7hHPx+53!ZB z#yumj{l^mI(~T!)Q*$-E<1AUQ+ty%uIgPV+8L1f`8R%#!+Q~Dy2BtIU=)Ko{3al5> z;5Z&yFvOqfg;ywW?SM-Nvf$GYz~86=lsr9Fus$&eywJ)=_k%4lfe_&9flN_a(sk#G@D=c1^41NF`|bgj)Zu|48l}3rhH@XB z2%im7gwm9GUn7))Z{4<`2PZ@P1*3V`(z}hfxcEk~O7$ZDkGB))e)+Pjb$Vc^A8<@@ z4BF0Z1%H$_W>ld!Xn@6$3dSI#cf>8?@{wNIiW+T@^@02P`QN%%`c!9DnwaBKU zF-x%W?7pRUvf00|#{TP%=g)6OU*Guwe%v)if8g;;$ZPo$-8Cnf4`iUw$k&bjDkiFA zM}Qc#Co8^}x##9VY#^RaV6jRRNG~Q-S;jaxCuWsHAaUo0`UJgMHEVZ2OBCX;hHC6p zE4meOR!cYGx2dsB9tClPH5dJGbm zgT$M-KtD0v1c3^U3k)a)uLTU8?$OaT1O}j)zN2%@8(K^ovzi;EE3H+Nk=h8>F>3=Z z1qm?Z+vljIyex!)wJ0`atvndgrK;XGAzC|0v9=ZvxIpx1TikGrJy>M(_Pp?!-g&ZO zuX&|N7$V#uOK{KTdpi8+2G%Z|N&qTT>(DX%@NXo$*Spv^n{My@06*$3HhdsTl z&Wlha7C!)R3gY^Dpl?EJfYi2jy6#sF#BRU=%{laGFSv z*upK60O}d&{%`k-laeSa3~_s%sDbmpVs-hPI#p@&;32;SYF=L}e>^|^^w-Z{-g;NQ z_apqMtL$&ym4Mdm2^HA6gt^89(sI%qj^Y#2xmWbTtS=bT{qA+h_nPLi25}aJg2uDg zDh_o04u&qk632Ag2HBg_2IwY_vzd8*^)8I7FW;4OU9f=Xktj^b74!p}CeBi13Ot?^ zW!t)_c)`=Vbuo@aP-+jSB0wb^HOAifuRilCvyWmB-@zhV7)@u|z8DnX;ZrC*AP3e^Q8?}421XHhVkRN_5+6m8-FvPv zQ98cs-UR{keP%Cf4t!+*~#koF5sk`b_FfYbr?)-wkBPd zu}Ms)3ccxoGb**{E4W^8Cr@v zVx&ww(tF)WP`qONX5lACEhgt+uaE|C_^ANnz*_q`Ns&Xk(<(Ezm=JIS+PQ zI+s<#f|m(%OOF-XvONdj2!2~4CFHF2F**Gs7 z26XrUF9LHsITB4}qFj4l*i1>{;qELYi)vP0Kp(Y|vO`0*?2c=cgh|`1eLzYAvTHy= z*miq;U0_UDVZR_=dyoJ&%9rY(WHV*=@fy8pLiEefOEUWWnq0gvnLwLr++{5DUH+xp zn@bGntGC{h@BH{)?_nQfiQzq|zobgfUS}Y|gjq}um7J9Hbeh5F<$P{-8`kL=oIZeg z&=zUO=q7;@DblS4?iB>1`;f8jEz{RM;OPf-pCzXOH@Ubbrq)i~FJV64+X8#<$M<@H zx!j|dFD=YZc1CRrI7{7@VE#Y_GX_wB=DM4?mUh4syzW75*eJ0{HY|jvzQz>KVsEf| zjWz8cxrXA4ScN2s#{eNLj8DH@V3=YVGP}Q8<^{(01JjGe!-NNPSNY+YTX1U!!!WogGQ@veuk;=Rd)0uTTrpKWFtOM-j%bLaawuim<<9oe_ zeT*gc`yO^3uAB{Ztj$qQ4rlLG?TrDS);1J=w1khLCqRN(^pIF}fHd-4Kpdr)OLWDoHeTDfN3-?T zVGUjQ>phIsPZXsw+&wEWVH$|G0Q6^<(i7s?+!r(Qb-JSi(aRYZ{lRV-W6gD&hL&f_ z0yfb0rbWp5`Ng~|aJxQqj|1eK?-2oC>1&btceaPU_v3rx9QGlW*zbE7CYUjpFu<`g z$wc+ogy)>oGei?M-m_L{^X5r_p_yL9%R&FoEo&kTEODO#%OTt2ER}=s&0)QL@7-6H z%f8+0)Z!<0=2-L+n*6=(VekF;UhiRBrAHyEB*aH49#r2~=;r?GYqk{Bm>ZJ}@TvT#b3Y4w=YXuAF0@-(s(SyN3;7CpN!6 z4u1KkrF4NQ3l8Ig(WRC{RyY^;gYM!|=#=R~RvNuzWQb+rlB@f%&?|azlP{o|@Ky~{*GbZ2-244=i&dBx5 zWm>hTRc8T*bOfb!WnI=Y##T)CS}$JUNL~?y4N~nHts4i-G(0=Qcx!Zfs5!HZei?fG z-uAHfetfU@u+(f_Fakl&2f^1|15~R%vG1~m;_amSE&SzYpaT~Yhu7#z7C|a~40y{e z!4>Pei1XeHMH69;4)FQ4aZSM7-Hy4Y$kjdNzHyf%79xsyAr9QL;H@}d&cQ9WS+Dz6 zRp|o*8$=esf(oE?-53&u_M;m5Vrr66R z_Py<4@BR2*?_nQfiT%EZ+17~GQV`k5o;ewSO74KwhVQO>QD~#9J%eUta7uOBG2#{Kq3Fgyu$i(RTv_<)D~MGi7e@*jKP{V)_E4Na2YwXG$J-FzogO zL&tV-i7{8KyeXx70EtNeNW21}erJ2wdq2L{dzh8%QW`_oQB7Yp78~vj4WwTM5-Ado zL|32)qla;jm{`{q&=&@Hedj3WGei5m z?_ux#_+IZ}n6^3`dHALSvcrrMIL7C8i2@s64TDHa0FmsSV{cRn*HjnFQ zJarF`jK63vXEW?oLq%omKhKa~FKR`L~u}dE4*&5P(bYZqR(E5_`z1Q^L z`|-Wr!#>6m`+X1VbjzLw&O5lFey8mXXN57YNn!2j3OuOk*ty|{bF^`rE*(tD%EhL< z?XC%%LLt#PwUmJhjg7o2c%~o{Hb9iww6?{{wflSD!`}Pxz23u4pd&rb3`vB{Ip$!* zgRVRb4a0xqni!TLm}%p1g-`Lhg=CBzb<@Dl06kPS%=9TE1F5oWH(%@au5i1oJ+@MX zoU!I~c_V<>IurkhBJzeu4O`Y3mNW{?4Qlk=kNMhL`BvJjGihE>h?M9+00cq^fM@}> zy~E~^3l@(fAo<0eF$E4GHK?hLlEaU{U-}A=|DEk&@BR2*?_nQfiT%EZ1qhPZtnruT z+mE*-;4tZ!(5z<;U*2f&&(mXygVr)bxq&0BwpPP{#%@?;8#xoT1N>_G&Oj5SY~P~Z z6X^n2q$}-Q%$&V!8hvkj*n2;|xAI}|Q4&h3LMWk{9?^3XbE3MAE!c1qA{qF(nTeXx z(c4yfDk9S{4WMBEf}XlB4)}d`4xfWYLGv~`&O|x37HYbN@zWK4N4-%GJ8|Nvh_s|t z%;c7EndI}F4YudGzRdKlBe+h0Pq`-S8?|vWq3jE8WO>gm4ju~dkpo=!lw-`bA%*qrF$tBqP`wY8d9_$xZNq~fXr?|TJ zer#_{7>y*Od1oM|xYq!sPGwz4H@p(BH_)cGuNF+J5AbEDj7_H()2Nk(a1W8YUYCjS zb8y`q5WT%H&(f-pX)KC?5hkt(rzUvuUQQS_Tm|Ps$55~>xGdYEy-@v)M9&%_{0_|%AI2wpK#E-yKVdY6>}6LIGa$W}?+=0Zoqd9w_!!(-YqARU(4 zBI)wMBx};NoOX}cJ-tAr?TLbq%E7x}sK{g&iY+onXcRAyX}ctMnZCL?9zed*jOh z+SUR0P6~Idj^(@_?q&Lbuy0^+s&#ZMxe&<-G%c>M^}bZVxT!Zhk+L63*oK2tN@xNk zvdm^<6!Gy;)Yjud1uu6JlU&88cb`{~G6ul5m4f^pjhV?hnlE2r7@b?4ya?R8ICXCf zd5JgwkDq?}{HM=fe*A||`NLn|77)Mh<9lOxjeX2{MrA!XRzJ|eHXk|n@FojiQ#_n? zE!f=p>Y+$pY*yWdsU@h78sKs-u!9rE>vdp&CKgY)Z*FpR9GK#kigen zY?Z9LN92Tv3I8Mu?b!wy$Ab1UYk9*DvtWRp8NJ=ygr9ParxI|XT*ED+9l3#-kW$=J zi2~xd>)M_?p=TSXm*ZwME~mZ()b&~;O70RL`lQ_KFuX~;_CjzW0UlYhlN~LU?HCed z9?Qts%v3z4_3lOkZy&(J>Od$R1bvhR?xL5*xd`z=D5g}lP(rWMFBaH;`{t^8?`QUU z-})G<%Kor^y)WjvQF9M)5*Ej742N7FIRqM6NHG^OPDTh7Ejz`B8T~JB(sR3q-1NCA z38pkCdl1|PzS4Z(b7RoTNt7Mn-dbkygh#b{=gSOO_!fNE%b4d>41d+UbBaDjK^tR{ z*2EOdB(#DzFh{6@^PLSaH;z)GCt0XYWt`p8Yz$`osqLsn*UW?Z6Fc3&Y9fJgasCEy z{dHOW_kTV=fBL8X;r7pOvMJvC>Ag|5&kOm?sLY{(W@YU)g&K;k8dKN?tqXK8;2bf1 z9$6R*x{$k2Vl+68wgb0}rUIPdmjMrA)Y*<<%xROPf$jk6_PLvs2JBJu_igJdngRiT zIUO`KgoEr{`}iS!mKOcNet98=bzhETe+Hz|+>pHf60I=7|Mn^7nf%reh>N`-! zes!$>Uha$U{n%cwt9@q8F`|cUJHrk()!0!hR94a;2I^%C+eKX#pwX_;RR^zw61%Es zAsj|TyH74?a%v@vXrSZIqY#vU*H&AB$>a}xZ1q)a=~wiMmo{qOiAsvP zlj`ztYi6JhI#1U&Z^+-7sGtfz&=-t3IxF!P8F)RMeS7EJK<&ny=LDk|O_+NhiIC;F zc0`|_pd*48RPgkOpW~#$bm&@*Rtz|wc_92eOBc;!h~jD0VB8QxckVsy)bM+mW;%Zb z*N*~O(9bcPoEu0?=XMBM4Ln{7pqgAPW2hZMhTS7=?rI|<#7QRtq5*d5Jad!ioOUP0 zBmK?|f8-n%s94`hD1|E(fWnXQ5q4jmd!g(AjZH0Q6igo*=LV>nN^kPM`;_j!9Vpi1 zg#&u8;>UYBozKAo7m(7b7(d><7hcSK)p2Jby?cOVs?2le#HO9xALAo{VY^CWEW|ID zMjc4h9JyNOYcQ#S%*=;TjvmH43pGek&2<|Knm^s6I5^r+y6~E`SB^7#FQk8Enq65W zZo|UWIdt&!+v8(=gh>`y7teO0uu2~&9uI5g!hpmuD|U{YV_SvI(~qKaUVgHH2r>ge z)?If`Bw#~L?wH+&X7Ij!?asQWp5g*qz~I3rGP2`-jE@kZ4Pa;-Fw2&~HfM&e7`CCy zZFV&V`sy7BB4HT5k~Z%x4D7P!?Wrf0o;z+Ixv?-1xa?-Bjs=S$lu|w}_D8`$vzOn- zdHiwBNYkG4QbXsl(HXn_2yxe;gFpai%p)@jg)CrX=05jHn2*zvt1-2=gs$lwg_-}e>ceThC3ARm7wA~tky$dlKD(lP6aw^mWW)Yp1%M(oBs%RNE zU5u&%zlisiQ{hJ$1;^|{_r|+mpg_NT;U3+C?Qm3$gy9=QYYJkPw>7F8Xf ztpT6fh^P8#prLWzl7%ngo%Kn0O=bJMHWH^VzU;!#OATS0 z!AtboJsU37o`|obJ>QyHPe^Iqg`5BaEh`x?HraZ81M+fw=#e8SEAdjFdl|-i)^bFk z;G)}OJ->+eZO}bqA*lM20(7oqn3?9<5YD7ZuQi9R*h{8YZ0!R>NR5b976%8E?U&8F z4iSoIm=>Q4htoB^i1}>L5f8KA!%Y&J9dlFZh|}1b@FF<}EM+RNMz<3U3Df8DG-dTc zD|HDY{*Q~Ta=H&p6-NgiH%xW^p?)4VdPZQth*-Oe3&D|rOE;|tKvT7?o44qprB zg&jezBA0z#Pe$4JN|H6e?^h6Xs#crx$QT$F_gfPw&Ou`u;csIcQ+L1)eE}@Hj{~-S ztuB!iK6Zn-T~w#Ich` z!G}jX@b-#yAYR>b6`$nxK^KsuF1>|q6v~*3Zw$l!gPloX1;r5Z%i3L6)m*Mve_B^)ADSDdaV|)bd6E3l@8Ja(O1GnA?7+q%0nrtXe zVCx(kJ*DZGA|u4~c4CpyUUuBJ@Gy*`E&dvkG${Qbg}r8v9EN_$Fg4uzRi+Fb9E2KdAL@X|REm>G0tN~0FT*3P~|&|FF=ff%FkALAortqNF^H=@u+ zyEn|^_0+5m>UmzEB?*soWw8e$MvT5H1jb$v?xeuS* zAyy?UweMo=aJfFlM<{h%wcPbU40bR=!j(hq?p5HfaN!Jafq?f3!cd{$QFqLXo-@q6 zHI zKLmd!r}dVlXY;Y{m?&;cCf@@6WhP>dV;QW%s19pRFdT8sCEL+xl$ra;b2kc&_?6!C z9O6H~M?l$WU{r84#)D6-jk>2V)b1wN7WS>ndtx`?#1W^c&K*vMTT2p4f|DD%Z!@H}>}Rc_0HNsj)&3wKLF>vv9Dgf= zDuoPw8u6@A^gyN*ubs6o{vVW2!liZ?E`awg!*s!nC+xp3d{P83EhhISCh4Na4HSOe zp2|D2ABudq=3X8j;BFCZGx(^q)mg=$S&VphREdjA? zV?Pi$hS=ati`1|5ICa7h5aYa`=qWGVsDKZi)iR&D;|KT%@15TH7#{(cMyr~v0QO0N|L)NUzv1-9FRYP9Qys1beF+p`Cf1DJF%JwAIhPmr6n zv{6%QVxDLn)&3YC0j1kqH4Ozt5n&c2CDEeTOnJ)-<;2->hAIlD6>Bb+OBw9G4>C<{ zfB`u7$<5XKHa{vScNVl0akPaJa3`R`Drir89jWKwCPD&)V*8$R9b6eAE$${uI}Y!Y z&>?hX8iJ7t`?X(=h0?I00A=7Y28D*+*{6a~zhYQ+60Wb6GHdkE9A+^cmIvZ<_avN} zp!yu_ql_GGP!qNSh#ksm6_lqarw)gadQ9(zvi+`oa%|sME{Sci*>t5L7Ay8)xmI96 zD+jmin*(_}lsO)(F-pp~K-v?halUurbusV|3Qjp_5LZ4u8fv&<*LP z4k3K#~gkY>?oO@z3swOWeZ3hA1B(!LRW0=%0Bz) z;H#qG5{(Fhk{?-c)!RDip@Lu!gx2^%HcQcyWeLirpr@@=yz{C4PlVdW_B+Gzx4dcq zh|Y^Yx!9G@Ah25|(iVq@2iivxlhh{m;hb^iN-~{1B2G~rf_WtBFo!|aj@su_aXa@K z1lfv4+pR%Z{{1X(sx5RL-yOcbt>Vj|NX)bEy(pXMQrHr6P|%H@HGQrzs1a2GvsOxK zT5J?7`p$C<^sL%v-yQW-Uk?__Tz&QtDX2*A5Wh$U#hp~}23)iPdpHNfE4C<$8H~b? znCGH9KzdVj05xf2lv)9g8&BVKUzrdU+!m6VtaC%A9L&9Nh(9?Fjt9C9fgFKxjheN@ zugYPU^|WQp1q|J2xq#nBn(s=lqMhMjDgKOU&ekd8v zktmyivAcn1fKBtT=xXHEz**6Ys7}(wAs%J60Uj07O_Q&J1B#P@<2!~3E`$&K#h@q~ z+DWw5bkZ6}pZ6aLCpOKpwt2xs2EX8LK8jcfLd*epaRM+ka>JfCk|514G=@9}I5V;b z_vGnojq15sA8NC0mzIRL$5`#IvTcBp`l6NFNxAPusJ>a|z}+~ z8|F~Ty=ENPt$5m?u`l#KXX&2J&?xMwVmwrN1z}bSU@&}y=SvEde#e$A75J$gh=$Jd zv&7Clq?H&wz;oB3d(qQnv{iN0_Tkib&C-IXnIUG)wQga8o7RpYXu@mK8Sv0wM%Mum zL3zquAK)Vpr`nSFmE8A4&c&v!In&*DDG0NpPbVTe8ret`Y$KW!9kIwed1JuhB8_!| z2uFR#j%VSx+2eoE{Dd8TBfzkCA6^r<#*dNc5ger$fF-|MZME2%dJYyXV@5su0+@KG;3igOX=kH5*TT-k4$W^a9uKEKBiVkX)Q6Z0N7C4yc;nMLL1GPS#H6bX&*cV!f1zPH^aBFYx10p$kM1_HH40u$5W%IbrbsnrumQDyHT_p zsQYgeYs6d(@Rd7Va^x5xcg9%0&lnf8%SR3Z2k!V0_8kfe&%p5uke!7_`UIicDR&@m zc%ThDClfOYXUvl7C*36!XPv>FKo@vs#aP(nR0AT}fwJs8fb60CPN0pt5foC?Wu{>9qbA61i zjEWqu6F^Z3s4TKa?73iRy%)jKy~jR+89m^9#)CwNP5AlVCiU%`DHeRrcr94mOf1x^ zyz%QI#9dQ|+*RZ2H>8kG zF5agCCx`A~w;Z)P-(xVWvjB)ET}6SPPDiVqCHv{nA@FJ-T`AiKszcH0M(iTma9B2s-kdASu z)V^()XSa5EaF!V_*Hh@&k3iURZ|}xC(F0)*mywKVi82?(UWy%OikUAcRqA=+U}Vej zujp_^+}C%siV@_mQCE-hS-92)D54XCBqQ^M1-*o**nIcTBpyYwyLQ zPVGF+wq_U?&sklN#>P0OLJGD>4~kgxSoUHC?E<~Zv~h}&ib9AMp$&2%&vD8_wnJx{ zUtLPPuRjMjQDKkTd_q`J)jdcJv{xw{8QPK7@07{*M_j2SU2Ik#8NUILr=69w>}zl85PnKH>LQ;oAz-s~4BP=wwgLYuoW!AE zrl-t!FmQKeP97q61^T&Jn#!Xq5jktWcy*% z%0L}$E=tHy0F$8!au%i8w*vsve3njb_<3R8e;O8Nur7Nd2Nq4Nlc! zFhzi+IXU<~k4D4KGTHty_6280*`s0D!~EVIZgr8=Jy)CIh|ghz2ovVB32kjK>C<7G^nDTT@lw@e1(}GMa11^|fy^b|= z%o(VjY4{$cE5PKfLOroztRmp)?^wMt(ixdF&YA1(X9jdLEhij^zLbEgFQ* z&I;aU*K8BR=pTmjjZ(I<$1ziM+FhsUOKqE$gnz%3y#F_v5Q+FODYU(A?*2 z1HLVi_Vz#z&G&hpedAV(#yW|N>4Qd<-&{kHFm2~+>E#bZ|C4rmukDQ(P64m+|7Lu+ zgXFdKzV{=z*gv&seUVPYwfB*kh7ygd_W5Z^rqG8nsJbRByw`o5Ot6Es^7@7?&c}1p z*W{9?TU5;T0^0PmYXI)LJ+i;xrnbR%ITs;b;|AlE3A*=dj}C)_oOj5BS)Y=XPiMMK zDUASkN#G~Og$KxcJWpHQn!P?Kv#Q?jO?)7Z@yq65@1{?s8Q%ze;*@~QjJ7zkG{wH1 zHE(DF63ylaUP{8*eVS*#a@N)1^olOFjgsST?4*;eDtJ2PcNRpgSG=`4Fv3@p__yO# z=NBQb1xxr=C+en)1Y6L7)#LQP@gs0odw`*xx!Mq z-!~|?jR1zupv)b5cm8(UbVJT?C0$G+r}nj_kN(TYMG=VYu2S7!D|9>dS+UnzBkJUp zh?VwKYUe;Q;4*N$r85n5JF6=p8+)UFWdJPLRVMi3Fr8OlAKu#-ixXY0Ha_pH{&-WC z+rDo#oinZP2tv+ZlJE_)8*_6G)%JVlh&Qi9@nIb8wiX)pTry6a`R z1(Pl?%D(*xr^Y?_nTUk&q4g_6&TSiZSPxR^t!;nKr+{^4X3B{PqQLa3ul)?Ah<}urq*-6XI5_TNZ*4U<_pP<9z9QMP#eOe}9!t6yZ;j|QT5b;*> zQ11TPxUb`1m(G7D7gtnF6DO2|@hytl{Xr3+j9uG&h998Ux>r(R@vrn-#-%guVE9%S}h{^50Z_58EL-yO&B8;8# zB*@s5{c>-)+7??SYuT`6x9o#6Va7OSHA1;j+~c=SYZMpMd#ii-Bg}O+`+`MKH%WTh zDP3u|&9i%cz-r>dyFQ_3E?U^N@4@=BEx8RE%4E9v;x9!Tvg6&(rmvydG@`$<3?W+2 z;Up~recJY?j#)pC=Xq|O{NV!%@O&P|)F^vvvf*z_P~7&^WxE_W{u?4FNkLTD?w~pi z^uyUxcC|B)w0oAmCB)L4t2=pN625aACe`2$a?Nr8EkM%0=;Z3$&N7;7Oy{8_vctq9 z-$G07-k+nV9qBo_iteVj<=JAnzY_6SlP8S}N`}t2^&TDTHrudX+8VivrtxYmRoWc> zHAslCBiJ@r*+Ia5vm1Z^!F`80lOmB8dGqj^dYY^F2w5BV3A%-w(Icp!tKI3}I`q}8 ze>SFJd7BU8vw640_N01FRYZO8ZN#pgckb^UW=eSv1aqA>*Y?pwHqH{xr}*$n?piOJ z4DFL$=nOulGovd=RJB66%CnS}b1ty@?np3mF;ul2W`}FY^8Je2jh*Hy```)QFTYT< z(6TU@Y5Dw!^m5T=b{r*?k0O)b!zC6CJV$<+1O>ZTN1(aLEz=x+W5$ufSrDE4zW0@s zMBb(>R;iT%FVcE*A@D6!)C?QJ?Ah))h3x2k)iM9BwT1H}%DAsix~lMN_S`ysmJKZZ zYc|WFJ{S=gH!&Ksz*E^uu$-)$b%hRbG^~*Ha=@Iy*fiLTu_Zxmes|?$N%* z(A|6AItK$gee;7Eh-r1a_m;4eeX8~_ZlF@W4}^^TJK}=D+DBpKyrhJFoj%QF_KgsX z>7&Tl>#H3CV0{CVwf+=(*LOgpZ+$fS)~~j<;^;|MamNd*?&lNpwuX!^PbJczcjR|d z1_gvEbj;@9;_Y0ZTIW{hn2x|KIIq{PQ-gi(V9B<}%Q4Q({tfYCZx^~5OzOo4e8E9H zj^}%t5O5S*7>es?yz$Or-GX_BGqAD6#6b{=FdMNSZ+D6=6lDVrhkrxc_9PyuFo69; zAG_D)p`4*}_?z}(%fUETqunm{a!&GHt5uP0582Ph8Yp3-i;wme$*S&6s@MHeaxymE zv`}p42Z|Cru!sD0!&940#HQuOqsX!LU29jJNijg@095XJwqQ+3$qkk>pe%s)owjfH zGWBk<05Q&&YInV7lWvT2*>|ycwJ~Dr#|P?g-X7XCNam0|`#PlPcYAaH1LVveYvJUG zMsxVIt((i?w~?8U{)R1z%lA8-Q^Fg&ymLnjCx8vkPp?c zU`Yp9ao0}S5PjbL%mdyFbp@I6%^p(|&TgNY%TB}>>AfRjOt8~q_^Eoj_11;z(6)BF z!jL!tQ-4^2x1_}p#Nw4R+$k5(?}UOY1Hpk9xE`Je#o3&zTQ4xoe&4)(#qv@2u0u7^ zNjY>58&@PhoHm9kR9;tKa$fE6@Mf8kmVEC9*zCEwbeCEcnhoe@kolL>&)buNmRYRL zjahHAY&N-rSFOzO!7U(Vy?f0mqvFfvi&ebN++(nivZRo znz_c-#hsJgW_+Ltf<5tV?q{#Y-6;hUG;uq*Q|sWP|gt8MRW{1({Y#JDwJyVXf?|nXT%a zI4Ev?k2l9!3ch*SJT7%Q1as`L{(T(pj(e~G?(ic1mxaPQ2PJv5*Yp9b1mie3G&UYF zKIbrQ4)!4n56xn8L@R7^y&8Zr-ak{(9DCsxM(xagTJHlXTxZJ>M$fF(M*P6Vnl?UZ z+cki#pDbB%>tydN1?XLPhe!)ph~alAF~}#Ot$bvAwjX_Lo4CvD-+FAmQKLP!jJ$J& z&r^KNyNxSU3#Ef=K!#+6_HN8#Rku8Lo-5xQF&9wK)du)I2$MlDn_$S9@6qdn+EqK{Q1Xt&-%6Xdn4|k|EtrqP0o zW$)-mi^1efBPB{l3~xnLBhb>kq>zK@F4#ccw-Qpb)!Xzn-dt_0EPUs?70=~vOwjGg z$LNuyld225-Z(a~*7NyHPu^{giSh{`^0s-Sj2WHz{$9Pf6ZdA*^Sp*QJG>F$7lZlP z1Kjny*qwThXO{W)xTI!%{|#RgH0z@;fynUbb}sKn3;ZXs1uW08EKe)SWljJC98bNY z3mOaledZVdYpghrH!QjRdh_{t8u%Lt#Z5{?fSg15L5-0vh>EtQ6rkHtN)2~j{$FFL$9}_7X4kjof!&=D-qseHy6UwMrI`?0 zgB4foT^|BssI=P+Q!yc~!4KT{&UD1z4uZ2YAYDOdZ_N?j4t<`M3-QKc@%+ntl64qM z&u3vbDhTjy%nlc#&w!u60N;J#Z&|&*4IP;ZukTJxj-K75kMI7m`(#ay;lCx-LVzkK zlNgFCire;GvRITD;_MBou;Q???R(wc@bTmslrK5Bqq8~t7{al2Lp}Nww_8U^_0NW( z{curSt2qJ0sROWHoAS+??8d0=w$o^9W-BujWc6KIWn*kb9jiVAm`}&(^}ceb=e^q5 zwZ>G#P3dFQJ^K@Y8(s7}^WL0YTyFR`IW@M3FMZ;gm>V80-z?^jnL~hl1_lkC`}R}- z9@&Z-;KC~=H(@%)du)Na?3eu@eYFuXtIe^c%lX-9uy^b#8DyA1*&JY~V-lht~}5bu<8$aQ=&i`4zAqw_fyb%LjKa<)APr6-!| z7boG#r%%D?RI?SQBg^U+RGH{sb4_otE}gW^SSh!`lZLD3Zi*i=8n8(`)G~3Lkz@6J z;mLJBPqB?3#y%bIegZeUng^;C_|RjE;XAG#p!}Ja;i$gXlp&cOMx)!>sk&LabogC; z5`Z~h3XFZomAEV4c%3zWd=2%b3d?bL)5QjO-CN9ZIJX85EvO&uy5AV%;u+VmutM|l z_;xh>AtWPxyxu!spb6&I&cv6Yx3v!=I?cJ0EvI>>-#von5fGyt8LLlOeT{R-9BiB8 zISVVmuH?3ST}~0%Tvz=1;?1^uYV3IR-6PhTQ+2|}y#h0e3(_l0o|2_Tkk5TQ*=Wui+s84kSlbJL9j&s!SCkq7ByrYgx{Rvq z)g@p}D!vf|!cwEN0$BX>g&a|L(U`JXd@}k(#?MG%ca64KMso(RVODATD<;ud!-#D4 zLLp{x--Aq8@Hx#h0OjpZHTQ=s)GFZoZ=eu^c!YlUBBTB}PwPI{zSb^jSdtC({UPl7 zm%2YPc7OJ9x-a&M^{vp8B@QCUV&TVp=J(aRFw(RZ`C}sufu7bRB&8KOh~_*VCJ!gl z=#y~?JJy0*t_NrNf-$V0#KGa-dTGt1^^>&8VmX6dyAHlfLFiD%I)VZ|9_>Mj>n{>) z#{5Q;l*!UxR^xx-P1&V5O4%-P#wII8-oS(#l_Kq5q_bq=8V0@6`!T(+`|T0s+qB*i zIlhzR-=W+#{0ptHBhNLsP8mZEh9*3j7)L037oX>Gxf@51?TJr6xqe`^S!=Q)d)$I} zM|863bSl#j;`yNM1(G)m>1^MU_c*pZQcRlm{Jv;}`_stP9A2(tE}Olikbe8&kbT_< zf4uQM%w*m_SR<+?YBT_;**@vBdj!)*?U+cb2V(T{8ANR6IZt+9AzuiRQ}Q%>XI64w zn0pa&SYx(tHzLyyh0*vsm8O#b`ECy}zI-v=eh4ep$NZ_=T^|YgabX7*OFDEqnC@$D zubqtJDJu8e>w_n#4;SwfYY(1<9UjOvV>}ew{rWu)=Y9+NSn(p57|{YVyn9lFz`yA( zpR0Y&T#O_ua#U}awiDLHMr%MY26Bd4-BErjqN-ND#AnH01Z)73acY=v%aXTx@!#b8jX2jEg>Qa{o4bJ z#v)F)D>i6OnMf$IzADw73*GIq*!)}wov?-9yVDH_IplvbcfIdnyLC>rkg=m!jd-jb zx1YS5{LN>Gup@=eBZ(nkQv#V>CD5h{s&jGgM+MRlnMy%F9>GSd= zie4GLEm?h#4;?kq#2R0$+~hnOeQNo@wh-2yId*`=j0M)?aw~6v*yxW6-MCmYWW2XB zXs+3(4Vcx#GpLtwo@VNI`4kq(?jXiEW}CAgf?k_6p(Wjq_b{{(YeLU!4ja{;IjJ3jZcT5d@7lu>yS>cE0t7YF56JI*g@tV%}_H!4mO|##2 ziPV1A5sToF$IM!J>Pt#ItQW0@Pds1?9oH_AK-W?Gj@$$#A>leyMdEm$JtL^ z@UdLY*6v`|RMq~i?Dw~Cu_sg`Xp_PoHI$s%XFRO|eR$6Dt*v28$UM@?N1Z*op(h-C z?9NIAcT5k8r6CeOlCyo4LjW|Bpcr$9*zx0M;2mvdXOmBDY}VEY8MHjHubFH7@Z^T^ zJ}tSxP%ZwBWT(Ndi@_6(_wF9FNA<4pWhPh8FFSvB=|lldLFv;ctZn5EEvuo6OD@RK zS%>Ae(G5F|YjL0N><0svHzoM7Jr*q2Y;nfn55>j!GEGWXI@{>ssNaSEtj#U=zRjS2 z`QP?6IX^8fpHH9eVPjlhxh$V`LfEERR116KzWR`*z~+BT!V9)Yyj7npa1+l6A$XRa z7hf;e|J21J-&RC>Tyw$p;|L&}F$o(%wcke{v6p>0{@>-{nztJ9Jm4xKfOwmI+?jYn zkQ;r$z;GH|gE=}cm(5x~22F_>$^rpx{SIwe zcW)nuYEERRwQ&BPL1LsO-wmB{qJ8E8Z6iF$Td=x&E3H_9Y1tFPDZY1*TQU-w*%s=- z-u0BHcjvu;zg-5a)^*7|zp_s{^gdAZ4R@G7a20?mCoE^gEfO#CeF`4%31Yv`jY^*j z*}JOqg<$J0E-+n&+GYYl%DwIK(&o!5GV|TB?$5A1ywalejxz{L<*QWda?UCirB*LJz=D=``wQB z+(50reC7S?Nbj5T4eJ-^z)=f(9_jg|jFJs5b?6{P5`t~)rcL|;(8)(T>!C+P!O6Yh$m^guGBjxc;8hu}w$;T<-(B{?S*H1nM;ZMnTyM|BzX6Jtz9MGT^<4 zo+Wl(lQn$bb{Nc)wS%gioM+=Nf+bf7X9ru6eReN?gd9WOVeDHM{5{``=XVbm(ym_t z%?v#7$;nCPVZAq9E1Xuf-HIs)h7zJ=)7PD989LABrZE&78!#Zz{rl_BH)4~3K z{~0ES;x+)4GR_Zw8ZV(hGE!9WgJQ%?2+}VgTedzi$KR(jm2e=L) z-Iv(1Xxtew-J8L>pYC(LX`S&EDk%6Xo6pHs87%NYv=Mj41w4sB3{H8M3D?W<^2(N- z{xLNt_scf;FQ5Vkll>$auGf`j%+veBgl=9Z$aJoe$u@BBb3eXgovm)m1NTL)IfTGr zAC*Vz8i7zoz#fOD6nR|vdZBjdfF0av2wqwOe@5^HFf+fK^?d2x3-a8?s!F(sl%9d{*s|yNJ^+#rGB^%q zk6$0xT%=~+7sorhOEIgH{fmWXlom%hc2BM0w409c@qu{Pj9vtQ{9gVLm1cGGJG4mO z9(o{wYQ${zt-#n_jD7AzJzH=(TEUQ$ksC9?^k-ufC> zC+WmGJ_Xjvc%QGyAmnttr|+TGXRikmM)32Zz4EJo;=dUEIP z=eYz$?jKCJfzv!O@sv%W^WrlFn18=V{X$~Qra2TQrZm{o1Nd7@Kexcl_Cr7(2G zJ$~_JgdJa_2!_nnD7)b^U>{Df)(to<&94oUHq3%K#%nzsP;+bHdvRTM+=)2gG=TgHyyvWcE>s_lR00->L z^~N$TZ-;EYcmh;-q-tZg0DGOB5r@3=+7clr{i0n?JRX| zpt-MgH2GUR;Yh#(o~qC*nZqz_7^~at@93M=>4nk{M)o}sU%duwuN*%ZpKwhUm;i=Oo@TJB4ju$=S5z^r5sHz4Y`|Q~_hl z?}*^l`gJn3!5!@DMt2LJ5E zVNHn~(UO=C+P%`6;+IbY`_YqC>z4P<=0@g`JLcik`z!?r_DiKcar$p~;%gN@#2B}4 zzi9lo7drTSZxVhTw5Fi4j?G1{c!c*=6r+rRdnjHqTVFN0Gi=MbWG;Z;RT6vJYZBWg zOyAVAQI-SBz~!4ANj%bEWxKHM-QD;4EEGq!6Kl0T?~}Iudl-gI8fQSb$sQw+Df@u- zeLHS$jEbbt>)tb*1@pZyihyKo^kHs!ApXd|R>b}8lw@vaIK;NKkMC~l;~vDSf_;(xw6q;QKnx zpasAlM&1{f>jxXt+rG>!l)q?{^sy{hb<@Gn?V@62Kz5!3yW8wSQ{_{6jTu4u86U<{ zJ3Gmn?V7^+8`&@3&R)6X`w{lIzLz?kSA5*SEpqvgpll2ebG9zJdz*x;vEos(yfkV) zdhBg$rGdeU*YWH>$*Vz>jbh)!(!AjaqZ4xDLK)+p%|k0P>SxR6aw7EsKVuh_u4Q8K zep?22J=|o5nPI#SBo?hAS=T)_k&ys zd5kAb>}xCsEy-7vACU5FvcBmU_7i|`#T<)n5^;_=_XT0x@XBim);HkQ7+vd|h5M~3dRzw_DD5F{hmSNzszIMHE)9Zcb)-!8bpW8Fby{htzliPf}2XaNKZg_oAr->6MW z@N9f5(|6DvoH)M3xw#HcGs(330-Vl_}#*z4mztD`@85>E0J{x=z<3e<0lSV=>QgZufGA1&DAh4c(G)+|6vZo@`5DZ3n+1b<%7udsJ*+>@{n8j%&W(YKQMn4R<|GBO-q|>%_g=l z9X;|vQOKlsMYgF}D3u>X4l{gt-c;(a8U*(_Do6BjJ2zE&WbxZP=2@ck);u+%(-HGU zUGas6rinFursYN?H4FxVzp0eMvn9A^^3|j|kTwLf5aypl@!AuR8|~ zN0jMOpW8POd+@LmN->+>s(^k)C}^)iL~(= zFwejiI+M(0n==>nYqD(={&rS)2r3W-kx$BRZ{Jmh z``13SEz&1Q7}F->n`63??*04p##(JXIp14i_BPHfP&AW;0au)dnS5h>=zHa>S25>P zqG0#%z0Um_wU_1^bt*?vW6R6>?n0IOzAd%(DTY(^M+(rw#HsVuX0t#joZ7?{>fQD* z=r}soK#UI@x=z9O$<-(peMaBT@yZ@x5dhg;d@HYT)&v%`^IMNO5pl-}R@jR!-s-Z& z1 zZ2iNx$ee3oE@oRy!CoqWqXDu`JV?VEd#4W#)?TyGmYl?TiS^gorm=H;n9u;(TYA*V zT8Lt+EPN)b{Ogs$O1k@PTvjLlxw-Xi_yY{uPV!{JM6Fx&1dnxgy{XoyN$u+`1z^zBq}TkSG3YF0QhnpC5v+g;ZAyexX>@^zd=Fr`3gBJ8I$oaToI<1pS= zi`qSM*X{~OLpjajjlr`nUiaE;hkw~C0ap@j^w8Ocjh1#8@}pA=OW~+q?dRktg9D|A z&KvJzelT~_G_e%d7>VZ5(}wWTBJnCMfP<(PC1`lw$G{6PDLF{wzo5~EVCmHp81t?X zv1*LcbU4(6T(^l2VmD@F$xVi!GBKyxhvL9Yx(`LWj3qMcP!+0|xrxZ`o6$qd%8cZ6M30iWrufUZdOYOxR)N)~g9u@nuX?zd;ZcYgeJ5$3PC(F?* zy59vvKl7|v{d8uE1xkJkG^+8TXH$oOM0yD7?dwVh8*hyi2j_aHtyd?8sV}~Ox&I%G zTj#jz1EP?60xbbCi3109e6YL?ggQCZYLFAXJ-2~W{>+K;yGI=Awnn?Oi7?#Kek8j< z8z4^RIbQ)rH5^s_eI!e-X|yV?S~}=wq68UGdl$_2UQ2+cy*6?=g`CTM;xEQk7Of3# zH*cUWoe$D(vQOLG5@<2w*Nrj)-FN3Ag?PxUlLa|NfCZ3Y+v$xactWRV-*y3aZ_)RZ zhD6;y9Lq%O0Mh3Ekon|#&f3j&^Ct599)AdM@-CBjpz!ewya@&#@p}?!t*ra{((E(z zJQ!Hd)A);;vCq@tAUI#{oSqCzH&ljB~q#p$R(6ch`B z5CNvj(pPc!2EN8Vq4Yc{KpmF@Vz+XMAd2#+teBry{N3cM3Tuad&pa3NqLOf;_vH09 z0Sw=F^`;EjUrzNW^l;_F2e)U!kX%)tMhW5E7R{?fCS^wAvl}Uw$oZpn3m)61p>XPE z0K#K!EZJ_Z%0UmhOU^m*X09Cdz5*(!t#>n@EUWi{vv$g4C)0Q(HOH0-7X-o95#LKg z?ZCMKE^5Yb&s*Y z@JXLK8;}mgbpx7$le#QzOu!E}7KIRq-0P%;d<*M#8&F_wVLf(2^I2b<7mak8$~4rI z37m7M5}o4}k-Vi}Gj!$eN4UIT=k00ia^K;#PL$tUTSjOsLCWl7x5(gj`Xgz`z(gd> zORBZeJaGQgBPp%k=#6$!ay~OedcG#0u}Q#=yV(H>66WV?+QIZeLk90vULu#Y8q{;8 zI1M-LAPY;#!NI>WX*qkX}E@w(QK??`Oyyoe2I~V=-F3 zVYd_$Nk{H9z6u2CTh{}2=?zutQFtQ2Ho#>^dvz`|#GzrGz-t88+VTxCu*n%wrr{pazq z+)z^TKDS+Yn6EDq>|td{DQw&4^ek*2A>giQ`eJ*MS7tVYbBTi$KS1GeKAi;4&WjC9 z=od++YxjP(d}??J(2*LueY_%;fg(_s;rKG|_3IKlKG7Az?QKixg}FOVExKlE;r_O8 zKvfs?W0?6Ihhrgdr?3H7P+Mrnrt%S2QU6)1))?sx*_>(&EaU2*gI2-WSjZ!(vCKFC zYrLfY3*RTX?kS>ur1u(IfW?1~pEoea&4X!xOEbk0tH8D`5A187V9TuSs4Qb`faG2F z59}C^^PTcNRkohdkl^~k88Zc({-lhS1dC57p;#;WG@>mp)eTqS=3Ha747-kXdAA-U z#a&6w)WxGjCW1`hYqiMQuwte?*jmwM}rI)~V$mv0-R zSw>Soonz8Lq$VW`@pgSbLeQ>F_F_FYok{0zE%HUhPd$c@S^Onw^_lR* zdp7QAEW2{%_CUGuX9dc?Fk)n zh-RBlE>9<)$T5Hs0fM@E8_x2ou)%JI3VV2^p*7qNVjlyIG?BZ5EcSk@_huP%SNVp- z3$%KF;e=3225f9J?XxzrtwgL;7iz065rB`4TX)0nHNP||gT$gT?L~hOUOQU?uEzti z=C~ao#h%|}x6OH9!Qsmj6wgYpZ za7fTW!!~wy&ZLV50Y;EtkMv{Gdp2WOS@(NV2?Ek6Huk{I=I`Ei+2MTm2tjZ(Y?=FD zkRn<%&NeXox*r^GUcch{4BqUd#e_uRx&C0-LuPJkbr9HCovHK2^m~+r({uhj0Iw$!JgO(Cp23!ASC(jipI3H!xsz;^-JSYF>7!gQZ+Fq#8mJ&ci)+OUfj; zlNZ?v<&JO544W={%I{^ZScJDF9=5L=^TSIw<*GiS*)#ziFNFHIIb-|6$0~>L=Zd^? z;mO{Fd;v+>v{2lR*;Q2nJGz=mGFtTSlFQW@)m z&z{||NS`h}Ph8r0q`kzDs1{W3#R3GS^3oa#3K1w@;H1T6jz^i`8EOMjbsokg z##dkis*=(2&Vn1B`al3#E=)wxPXQ9YJ?{B@ey_aZBQw9q259F|*nBethEs9bY@a13 zp#tVQ0I0%G$Df6_yps#ln(reOjWIiQHY{m9Y<@tY_5dO>2p>MfiP<14D)gK&rojH9 zx?|vk69V78 z9b$)T<7@fa_y)u&Lo~`ZI)Eao9O)z`z%~pV>#~L<+Y;k**SQfAgJ_pFEbi+_qBIAU zPXu2(l#{O0e$!>6`j0Cn7O4J=!C#=sf7UAaY_Pt-W<3tXycG2jT4aUIr@YY+@#!t5 zOK+H-&e1n0_+pvtjSK_mNaDBU63zC)kt8rYVUG5SVtXeO&u57fC?*$t9!mV z;Tb%?V5RAFY6QMU8I&_)hvJW*G|lY6)7%=UJ#cp{%2puB_+6j6|6r+X0C)3!g@Ad8 z=PS)-)Axo_2`*`U%p`HAasVF<&)F<+KStt?zG1EHber1#(6=11Z7W*N>Lf6X+ep3n zH2?|{kIg|5+v$<;(dRF~26(t1BgapV-V-UiVdO7X@kRD)TCa1*q*kNHoUNKuBvScxsB9gA@+1rr3m!A z_f60;yLa(m-MbHd#|?rOPY{KwI3(An%#8TF0xb!iC~!5Le_l8P$RIx=&BqY0CAT+) zmRgN?FPsEs2SRPVwZjxet*)MLWLeN5!km!`;8~~Iq8SkcloLX1ac>dmAE8)7zQWh*W6rZ6;?hsUG_Jt^SbLA0lpr-c4qyFQh-_d7 zE5GoqFvKg*&b|(TEf5^@1a(!oc!+u{A$l^OZ>b%KGoT{twsae&a|w7=j~7LRfK0^J zM$3RLoWA}dc9Idl3}S|`zd>~x1l0TOrffgBK%-64l(#+Ytl!vkpKgOv6PA9%uTjUy z0+%Wu0PH3^ICtLM>*6UC=r|t+orMFdDG&b^GmwYpW(q&*5+>+)0>T)XLi8tK=h_-Wjm8J9*Y8iWdeN- zpSB1MP{7Uy+MdmkuRfFz zdK3%Y-FL`Ia8(vHK3C_`ANpZb>7v52wyzpxVeSiSII?=_n^7Cahwt0t?%lx$ITtxJl zLKE`si~VEFxh;yC8t7y9!sVXptH>NEwsdBEoe($&%%y#bXuGUfh0EoL&^?bw6zH~R ztu6czLE{~MP@j*6*2}EZT%Ql#1aB>iS{!MS0q|IN)#o(|4yUhyjfK%Tl?P8e<;Z~W z`L54V{`lDmqg^Kyw&&+|a{`6q1I80j{Whf(2IS0oNj1>7mKK0YllrpS9JxgJ42qq| zhV1LO@R*w5c4zP^QQ!26BJn#FN=CdUWPi<@$7r6g!#B1W>RE`wEY_%ACGE$7e8`qjB#V@@=n?@Jh$MgfY z*REblpw*dOv6hX#-oq~vojzkU5MaO1$Cx}ZzrDBY-j$Q;CJ5`YI=fvK9$g%tY|_g; zFsE=K#+b5i85T3{iWhV8caM7o2vR%UtbJv-}2EBaZj@bcYiF>F{;#V+>=nk z@$c5(*iB8rfb==a_!Z|I>3Vo4FXUj(B64OZ?sF%W%gc-(sF+w8<$d}W`6V`Vw6Tr% zbry)p=q&Gx2)1CrI_ z(vQj;8M^Iud`?!j;0pnA4VbdFjjBjeu;?rYH`V0}zSi8;6H)`i%-0!!-D#2oJx&=? zr&_fSx}naUV4s)G*Ft%ZV3ud&+=@+qk?i?A^2_t$4n49IpAV~9FjAx=E17uEQHC9g zkAOD?Ky_@&gQE#c==FP$%}+jDCi=$6$<)$EC%}fj{6Rdpi*_pY&Y_aw-V?d+w>1nR zH*D~HBn`dO4;;5nPW%$S;T^=QoUR^`1fxPnGOsD}ntb2J+obmA!uEBS4mlM8~l_1nIbp6!yX#D`Vrj-`_Tiik6Z0yVklW zScAiBaw-s0o{mPWk}ht#JVQ(NWkqoAB0yS(uWYtKP1oGNKEvKwoq?Eq8!zpZyK$GY z;O3N;agDL)tyZ*6r1`M*sVtP6Z4MLKQl)u}G53@Ks7<>BoH<$w)8mXes?N8cbKDKZ zmB3iZ6)K;;1BGktixlGS|40$e8eToA4$?`>d?` z(ZnFtH_>P2^7?k&c)U(d!u7Szx+LI`I3A2%3;?r)0mCOwF(_fV`em+un53gMozeK7-V6a0%KrDCUx{{XqaDwb}&t_AHRjIMlbgHmEfO6;!fs) zfi2Pf1EQ=I&vW!a%+rlhG|6G&i>(dpa%{i9_TGu@l^b0)hYb03Erb6bG>~B34KtV) zn0<5hyH@30li45T01qyq*GUBaEg?szUXG3+Nx1;$ritnB70lbv;9k(Q?xjV zqE9(F$W_s8kLk4&XO5L0<}I{e6!`<}81`vT57$$L$r=$*8!jiES#- z@P+OE0V>MjOfeO(!u8(?I;quQz@LT5DRi$adk-0uEx_#cHAfJZJ#;bxO)YtyMGviJ z4t|1+Eq$czRc=xvpJCAloSY$#`M7;N-cFi$e;UX)L1PtdebU!M%Pk#r9rG(zh+hCxNHzF^Qj7>*m&Kd&oAun--ZStygzxLpx*w* zkFe(g5mJvhmR|p;_LMD|H+-6`YloD@#wd@ctmD^M-B+W_gcs(?!CHLpWD6CFgP!W| z%L^p*-DcHtCf%+0_VG&FjB)Y<_Wy++LCdvMmPI0K(m-$tGp|= zIeJ+peprunAIljqE<>r5LG2?XLj|Ri4KrYGo7YbGX0*if4wQ*t$s#(0qodO&N9zGm z<7};UJXAO)(uFDIZ~O?PE?ufgGN`dNcvQmCw{9N^r6|rp^ty+LAl*Z!7!jiDsPamJ zT$EjHjTXrQ`B6`bG&uVbN@8NP{uXn*Tx&=Q+g zXRWidXkyd-&eT2fk@6$eJ;5IoVE9eXMX_qrkJyF{HoWE}VUT1KVKzS~4AikngM(}s zFb_>;TVbRv?O)ZQ3wEB$W%WmX1j_m*{QCvgkr7D8vKL?GYHB>p$MH5%2ZLUSvlRpi zmw7lvS5AB>z-J%E&K4X}Sa!T|4|^!Jqixm}@?9>Cl1EC>cdak9L~N9{$~t|2opGUv zrQR^JFCvekC8WayN0ZsS`>@N8hI54#(uDK1dOEhkbL+_~A-V~L!al!n4eP^bKze-) ziFDBI@)1d=MIW=;T8$gCkZ6gBZ%v_aujWo_WcQ@w1`U5RTeE{}4M$}V zRqT(ntkaJ3K&Vo$%fdyA0s-TdEzsijk4`h9XnC4OK=X{@bi|XGqJBjfb_^}>qMry6 z1S3JG1=fk>+pdCXk04v*J8&L#X7aTs-G7`29|tm$hHQa?@%XJjIK!vD8W9HlBkr*1**+5_-s) z^PM30z`*^<;D116p#i+6t_73{wS`1n_|BRTM1!#-6Nb$!S(hw|o&9XF<|Y%;J_@Pi zk|!qT5ZmN!{8hqmmoJV*nQLJC^3yUB%gF))@TEjLpYzxymj;V(5gH|Fmk@cF$XH~r z8o&GL6Xp=%0pf9on+3UBh-STV4WJ-4MVf%BxT$n{t<7ubC@d7&6&t?aE zeBRG{1mY1e$_LHnMz^Y-0Zy2g5a+i8V$Bp6`-s()12b!2=NeRBfA}9#`bN+EhVuqp zJZNtSx?hm}e1=kq!*<}i%A8GZS%Y;{dxP~bjY1^DTO5>5R#yVZpGu+FNAO&Lz=$O5 zc}@&8ZA zKK_CkBD({j84P@m2eW^g)pWq~O78FrOA?tJmk1TfPmV~{BL$iM``h06X4YzlM)sW@ zKkA_2MEpKqmpnMP5;o_ybJzH6b|}Vr%AFt1fh?{(tzjht2>qfbX-0@pFKRqeeJFdh zY9z5k7)c+fzjK>Qm$x6~QN0K!xF+55(w85PnqQc2(jBpTpZ1*#$v121LFb!MpHD?c zp|L^aeeJxx&6ZT>K%r^uPR5FK`NAfTWc4PGb7!+&%qqJHD&G!*XHe3*{#n!Yy~^)m#l5rAmcdbIR$?GJv{YXQbvEkl)k__t{58r z>>d82``6BW)~Zjh`ha@ikj4Y!K@JicU@0Y2G=WeJ z2L=4{Crwen8=UPVUg!|@*WxZVQ=G**TlX{Y?&G5w)G5EfY&oFV%zl|!DYV&WUScg>7fn;%p9et6ivX% zM?QfU)J~^G^$@$HY#Ik3Q&Wy_aLd+TSpx()TguHw78!@Gj4h(OGK1r#R>r`@S(5eXPy7L$FRE!e;>fmQp}0( z5imQOvX!yd;hk+??6q}@Ti73BZaVTcrO|b_r7+7TJio=-DO3=udwqu;rGymdPF9%{ z|MJV;U2o3*Z^=4?`Cx0 zfCpjymFw*o<2W4D+Kn|9XyWo4|{DOgw}#U=!sdkR;$k5#9*`QTG(bpnui zAM1TBmOC^z#N1|X4wkt|9hMw062P@nO=y(yTt`BlxOov^4=qtF5{MY`Q2M^!_S!dy zu6O$y&96LTIN=M&z8RL>lLFpjFd|p;uNEwbt2y}`4m%S2%kXh@$_2i@8e9t81fj0r zpjq>DhZ|gnICbRT_z?gr2$k@T;E(N?XoC3~EeP_`&>SZxr4qCw!&+G#4xm$Pc&Rx5 zmd~F3E60z(NA)jd`c7sjC=BtEjgO4@~ zrY#E|S5o2k;?v@5z;U#uu`BN+GD(l~Zku!?0JjP;wo%IE9zS!M5dg1GY9INYtE0I2 zK*^y`otmHrhctV#d!}md%fQorz&(?4>=;+MkvWFBH4NSeq-XYT4~p@cl{Tj;^*X|C0l^?F+)cYFg7F7=T$Beil%ur#J2xnqs z+>UkY>$&53uAzYO)`PlUmGgE0GW_<9(GubhIyeHzy+olHUp4zNFyMFEr2XTNlk9tS zqP=%;y)f4%39fW=5f_S|KAHos0DNym;<(=CZy~;v`c;xY6tT9io)i|OpP;b=6lm)c z+b$!^=+i%kD&W-rXYOolWa)7&=@KRCkLF0C=)VaU!2mNr%)e|OZUGDI+c&c_{dHGm zO5`~aWsqk+-ue>0-j(n_HQD|7paAad_cqGXV3J(hsubX7duJVEIJF9r3+1z4QiJq>n_i|KLa&5r%1hhrCHG*@{FYURI@9)zBuQUPst@+I%J zJr3*=q8`y7vyX9Wxuo}ugT$Vay{juz9HPpI*=s{DtqDsi??!v)J#f0^$RG*B35FG2 zeFpO$(bipQY70_*XLW_l&vpddQwU!c2moW->tum?mf>-by~5L&d*dC0-xg+qa8K=8 z;>p!Hj=IP$8(k`9=}tzsZ@xH{m1HTz9I@25N{~E_S^b(@>^p9h#0o7yN5kj231}zF z%U_(ojVjks$8;Lf^uP2G`&4%O+Rp6umutm_FQ6W zm@YWYSc+66rhU#-kb?2;WvqFSyvIg9ZdAK5>8>+Qa$>QMSLgAL;KKU;Gc!`tVslF* zn5U})0ATX=BR%V)!h-LT%UpTTC>s{Tm75)D+Cp`RV!!Eprs?x)6_xew8eD12F+w8Ic`7jji7}>nL~1rI0riGE?34fX*LJg zODNE^39&Ii6O!||c>^6GeDM;7L%ZP|PBwz&TI%b-jY&xQ8TzO-jLL~1xLj5~%XR0M z^7O1(T^XS40_Q0*ALJ7?JXfN4!I{mkbRYG6E8-!5zu`B5*PB!Wa+xnk`t{zH~wjsjVDNX|wnx14HO}S&hBt z-24dK#V@dVlHOfjh2AjC1+vm+hx!&oh~1XgE^DMct*W-p9(VK^1jCrCalLq#?v<&v**ifNBW z=rDFiC~g|sqIRQ0<~~EpCMi2F3_@jsejji_P@qzbFB_NeyYbpp-1Y(0b=-1#6SvbZ zSjKjU(~X`G49t5Ilpu229(cVi7zNr`LbiYP zPXEEyA)6o%;(WV{kta6}eus?kn|Z5bU8%Zc6nn}Xi^8YDZ?2DeY{!z^-U%MGvj}Dp z3r@77c8&;52HT>J&x%6<8Nacv>E9vE4`hyavlzVL-R`piKH2D^Hpio!eOeY()?6T8 z=Z6h`_0fJLaM( zXxYN;cuIPvxR2(FJV&3gPPuLzyakAIyF9FRS%k|Yf3q4<50ui;R~^$`9ld>r|FU@f z>|6Va*SQrY>J75R3J~M^>N5itL&lYQE+o5q@RCQK9XoWSS2nlgIY_C-^MOF}LV`QD zQfz;F7QjA>S+iW-^KyyVi<+ym$8tti?X|EnN9EY^so-L!!0!R^CA4TTu9)Xilb}PC}n~?^?V+qH7NQE)403HU<`jn-rO+~SpC_M*-lW2EAIPEMU-$z@B~3x?ifAXJdB(Pb@Yo564~dR)pJjgUXZMt{)(rSSd5nz$-z zX~h;+J(YU+T}V}N14C2IPL|+D$|2b~0)#G=nnp~*cCiR%^|j1yE4Fh6KPQRANL>Up zu6Hhura|8uqdeZPvs%?n+OBiy-DD0qT#h_{Vw{DC=V;$34c-LybEzn>SwRK@^nK$9 z|8euKz}?+_tUw9EBGK2b3oA_@UC#6QRxNtPp%gSAgOs;+M(mmS4eWDW>Cf#;fCU;+ zO#1bd$kxq@2BX8v<`hxK8ge;qLC=GmG#Im?QG!DUyIabvbt+Gj3&?fZu8bq{>`dm@ zy?VaPSctjPy^Go~IW|;4s6bYSfC+OvzVN_f9(rmmSa_{Zy02Zu$-m@%6 zT5Y0WFIG#q-8l^$1m|%$S1~tH|NXRR#l7c~-&s=@8r&j66Y`Sfxi@jF#gZhAMX&w7m~T*xIdK#4JBr(v>Rv2S+hA^HgGs{i zND7hI{SK|`#<;_xuAB2p*}G&M0^b3vj$`~v5*gLz-h9VBE$B$TKt0lbZR%`OP+Zio z&7ifC*K8vK{m{9v_jvKO+*tB5g}vP#y&c~@p`J23T@HBfaU2`Nyscc^EQ>*C@)sb< zzOLLI06O`kxYma6Ik2cR)RBXpqONXp-yxdcr$J9^X^zjE>jj+4NQ#m^z2u((u2zq=x{8Y#;7rYd^ecUva_lqhC@laO_ zdnGNqRCCM*Rj?WT7hQOwWt^>ROB$ zc%hE@7DcgE_6_fy!?8R=q7Ccx3PW z($8&?CqQp^^AO(-EUwLn#F$6kdf)Yw-k+@iWyd_a6Q=2p-2~f!{O6aGkZS;tjny3n zbB+%%g3c&2H`|FpvNmzn3zW2iD$$^N_vM*ux}?;~z^70{#jG%{oUp_J5w9ngQo}W@ z%AI!`OtrciBJb;7AHA-kqau3-3PYp`io;ePqc{b0;H}6)`|WoPj%f5+S5dinYND`A z0br3L;H&y63Xv$XG#-yK-6Q)DRQ;Kk8#3r}NYWa@k7J`Xx7P_D`zhIkJfJLC%`!&k zEmhwYG^Ra8iO2GDoZH$!*ercT5cRnIaT*)tfaI#_bVb6s28$tHrzAN?hqy53>G1MfsDNzpXk$+wn`B9`Rl)m2 zcJ39~3nObom2zv$F85WLg#+~70I(i{joGQ+va+LY54&r@lCXkuaL)JM;}->2{gFS- zbjqUkGotxmH&iESJTYu{WT|q#Kuw6p6Ixp0AEb;MDjME{Y{_}SKgVaKl`s(#7AVw= zc*$kM-aoQI`!~02+pVVcjtL>wN86YS>4?*tAk+?hZ&7d1A9rd7IjSUi!6&QS@nxz za~K6+-w%vy$n*oqL3Jt}>ij=){Un;tnrHV$92?P?@Nlv+p`KXO6o{_-*|1 z>z$!e@*ds_p)T;$B8Sv$iv`2=<`}UogG)0wf;P0GwXV*mj@H$X-WtnXlp)xy1@3x< zAxx}n!CVg!o~8G-yiGNO7f9ryS=d1qJ13+QKrH7iTvRz=osF=lPT!6)k1tZKG+3C6 z0kdOQp8Uui$TD`~Bg|KC6fP*t=GLO7j-4vrrF_sc zliSK`d7|4u;d76UKTicw?HOnW5-E4lH!KhjI{ryMr@(Jhlx3Njs9qR6 zA3qm1ogr%gN7^^D^ID-^>~Z$TW%>U<0`zaiUaENE3X{BpU(z2aBs5rB``P%XM@4re zXDTd0n~jXNdOwuMi^B#fU})+P%tY3gz@h>3&mV9$@R6g-x|Y~c;zibLac;bE8U4|NZIG?EA5I~tqm;kP!Gp({xX&|= z5ub7}`onb`!D|UNg?~hY-ml(P?fQP>M?fa`Xmyf4CcLr*=8+4`{MYnwiw#)5k@hl7 zrrBm>2mj!s#}ZV-s%v=~J82q8Z_S2?e zPutht9yg@%a_D!z{5O~88+bW!q{U(SKz6TYez@1cal=W8u3n+c7KyRjs4SO@E5sL4 zX$;eVC0!wAm-z+GVGc|S^&-P=2W}nH8Vl+Q1$~?na_~|D_o3}sxC!7n^BS)MNk$J} zCY(L0fTKAE<32>`Ys;-shTx!{g}Cg#kiu_!J-4+HP+VyLmvM^&ZX7+@rbKNxm=LE? z`U6A@Gzpqg)GMutPp_?(&p5wFpLJBm_PLxn7ratwT?tV=;)i7L4DyD~!Hh8_a2QZ_ z>bR1UUzq_k2r$w~_P5c=Ix}~AiPTUQqO?9)8$UFl_D}-Q`Z}H6#_|yv@ZXYwRgzqH z3zR@y1J)qi3)7-|vgEwi7S>~m>N&wkmr{4VCjPYAuIyC(&LwYx^n0r_TXW(>3x^Z- z2D(^KiQrmuQ-V-@N#l_f5N3dI9=VmKFRgVLr>m;a6vq@2xtEyd z)W=q&-4ngS>0a{|8dj5=fKXzkAXWz&M@r*-5~)ao!L9s-kX3|Va1G{Y-3$A&sbl5w zwZ=wAV17DtnE)Zxoa^|Ro##Ff&QX~hF4R6v8DkI`kXg623YErAs3?PlI+X#JrI-7|3B*xoE*E-03n^$X90Q1ty&CGLBpzDtgc56)v`vicG zQ`KJ^1hX!ey>shYZor;FNh1Xr^FYSY(k@Owy0R(4CY$p7Ks4TW@s85o)2c2|9Mux>c1|6niTd)lGE73A-KcH?Qo8y|yhlsTqGMn} ziizT}+L)hu^Y#{X1Cc-OUgx*mkB?(gaxQ3=nG4Y>rTf&T3!if-7)j^1t<%a+$S z=J*;U;31FDtHGeX82K}}yBGA^JxopErt|&PsrhJvDo2+Blf^MI9fmc8oFi`VS3CYa zerKBmAWDY`gcZ?4!Rl?Y>~X!M6ieDo%i&{(3)jthHn=O0KY5PRHNs3uc5?m93tcZ0 zKo2SYdWrX)&U_CI-YhVR`Hqt4?Q206d_|15IJ}BgOFXYHQ<>iMR-$hFD=kjC%PMVQW}mv;gOX$#|tR=-~|^L9o7o z*gR-)WS@ye;SQ36k zVMmw7uo)NJ!*Hpg%MpEDPDp7$SM)qP)?S|ogUIqZjU z##126tWww_0X$Sx@B?SN3@wlep*-yh^%jcmgW5hxxss!i%=jRzO9VuH9n9~_G5bh? zPw(fID-6zrFH2sl)LA)`s@fD?E||Ytmq5e~nEHGx92Q;8u;v`Cz1-BzwKti%hKI8P z_=6eQ&}&1|-A_J?P7#ZbogQ$Ex=1sD4rxcEdbQC?TxUY|n#1tBe8&j!*s><*YY1 zBCcqKWNIg2PF*!d5al{q6o;YrrX%Bm6(;Z6CilEI)=Z=b*aZU6(nMO8`v}EkfFPZo z2H^46`Y2Kzt&9JorZR#i*7r;A9G3 zaf{bFoj>tm=#I>bM-x+nt%Fcu2h85(lu)D$I3gf`Mx7wmxocA5@I&!bvT(elQ908C zUY}v)%$4+ZE1k#i?EQ|4DdDX)xu{fUf6PDIaxxVBAqw>pMh=~3E5|sRtcY;FpOgw@ z<;O|R?d}c0`%b|l=EbALA>_d}-hNil2WU!ShL_43gVq|%G*XSqW;qx$KDPM7QfH!P zULCZ_*LKp}ry82S)45{%jpt40pqX4YwY-onXDUmJz{1^fi!#-*W!BV~aoVBR3& zSMYW9RgQQ$-Y@dJ!SxO4U1|%$*hFMyV`7;{x^?`4N?|AZIQ=dn@$}uxMgh;!Q0kQY z7*SG^4#mBd$u+5!E%1^cc*uOk-c#+0Yu@$+HUfV_h+HI$`4@f!SFe?&NDDE_&4ol4 z-okq&^mKu9A@ytyZ}XlE1(Hj8bt4Bj16;~&L?v@4f>2Qh_<4w7SEQ`str*H!Ja1UU zkB=Bq@6GB~NNdk~B@W6ngRjuq1#IN#Qr;#CG2X_O!oz8|!-10iCk07GaD8!L?HR9g z$cr|nA;DhLfDT~bur0>;!i%Ft1N?U(lqb_~T{zc+i{)aZ(qD8}3}piH!GBY>O*-jYqIcE9ULpHBaPx#AzP&WgycA-sUIv8$ZGi0C<1k zM`%kM_Ht%y^`!~R_T#gv*(c~+GTxdOFW@o9QCGK}wKiihro|gR%dYLLn>t3K@Laay z&`VvFhqG&Fl=%vOI+S0`#>}$JxM0nQYN1*sYmrSX;$;OV9?nb^Mb)ZuW-SL+C00}p z2gN8nymgX^KCE2wPkLh?r7ls=0yTdTs)xbG8jpXtG!LP3YBw9kqbz~_Y6xendrWkM z6!jGzbY;_goNN;@mR$`L&mg{UDhyMnDq1WM9DMoA~SKdII4X8vR+xV(hC$$Nx3)yl%UB{%kNHXK>zZ5w;tR5T(1l}oqg>pOJxkJuKQNCyAekv`iex_qI; ztAt9IgwR4{;nb7PtXw6Cg3i(nyX3^fjJER3A}SRuor3Tdy1qWsRZfAiv8SAlmY#<% zzXh@nTnr$*G{VFMydAJt=JC~RYhPn0UX}Dy1IK@%S{Jxi#-5#LZJ>346M_|@TR9HC zr;jXr5il-t;!eIrcWB{sq~dk{#*dKo%8HnvG1e__ceZ0yCZK}bjfSXI`q{*nhs3Nc z$s5dhr$B!#urtU? zwI%MV5IQo)myw9p+v}yfh%KT@H>C~Lo4hvbkY_l8#AsztGn5xtk}3Kz8UWfz`$Co4 zUqy3(7l{W$jE`WZMAn%7^VJ}EIfjo%jT=49;oZtkj)=o;ax|XRSB9;J3|OKpJ{RNo zhL|Ij4o}l{PvLD%aHIAYW86DDdM-hSMew_*XRS>19D&(@%xJYeE+4>EU#F$SG-A<3 z7%M0dRR~8R| z-3TJ0T*>hvCK$Y=trVdIx1Fg79Y(@$%x#IrPKN{#%C>-)`|g#>ZUYHGYhnasUR`HI z#e0WG^;|eooNF3fXxg)xUno}waE}$Mhtv9^*fTh+$sU-DgQU=$w}7pRi2%~apaamU zIFi8tnjVy%n4_F0VHDEKd%7_XX#<`CTA{T7Xhl}5zO}wV&s(%w*xHRs1Y`OI%5}?$ z?ta=PL>EaHO_g+pCp&B6nL-%C4oe z!qdZgOs-=5S~9xyG0QWm)?`0p)w3MrS8R5A&-yujt3tw=L7JO9dPxe!MRc;dW6z^;WK-9s1EtFL5d8AGm3RIi%q1B2 zIFU7Hdw~0m78BKp&AAynH>Bx9y0laIe+%H&qf`pu+C*PaJ9GBBbW%DFRKI<<$x4K9k>7jPZ3hR&u7$(@=CenXj^L%vcDPe=lbZoZ znj-?XK;})*zd1o$O&^UjO`sPxajadm;XHw=J*Uulq(i-;_OKQmLT1c@Zis&Y$wf3F z^K%g(?MN33Mf#!|0puW@mdeEORU^y{ppDcDK5>lp6$$=u5;TS#3ozxY|T@6E-H+h^_Hu{&!Y!}YVXr0j;e(@1( zSMg#~Eu;xgIDQYWsXsg0%WA@K3^lJ`Coau8At#T_LAjxWbaVl??!3m^8pK7WjJM7k zuA;mEYXQqwA1XnZ4zbl+c?!^8p8DpUxmzpu24H}Xe*4%LrI?D?O_}Y6_-0qTT__S? zMlA4&_^{1ZUOJ_Ai`j|)?(Q=K(1jcU90TQF%TIk}Jcja#`|4cP@jT#V*o|nZ5*W&@ zOwdYUjSxJodJis2?2yJeFyz_uzWq==N{!2uevcEzo&cy}%L5HKQ_EnzJjM5!p+kdB zUVQ{ia@cNWneiT~V2zddLUwpoYYfIw1bc~cH?Vb>SA;kaO0%v62`4Pg z?e1f%3$0sxYfaM!iu8wIIh24A6ps;WiENGbsWUfCS4(^tF^DF77;lz|NUC_jF6Bfp z>63e9bz4rQGkk6zXY3)nSd_hNc4mFMPKHC_HV0aIhrr&>(3wvy{$sSO_erVMQk%ZV z%Br`nI1$i zoU`rje)!5ds3ngIe5he^h4~q zJJ%IhVvnU@_$;VPTIE~APL9+xF?KEXR%xW$tY~FU(f7cwJiP3= zQ;5K>0-=#28XjmvR*QRl-hDT9wv%R)IvNFGQ9ymMX=ySOZ)TlCU8f0@HNF=tn0-p2 z|BUU}4u}-BPLtjV3EgwGKRWPA>341xT8GX$=l5BHUHsi_jMkGg1|cQsl(qP@zxoz6 zLnnQ>SlgqJKwoBQ?~Ne4qo+Q$QL;{NHoGbF{gk7_Jn;3A zu0Z?zz6)qbiEgExdaw=?C5BHP2LaqW+ zPh19^61vyQ(cSxagXgq7a|afB3cvjq%=qcz0_|?McWRZ)%C1fjA*hgXopWu52v^xw z2<)K53i98!RxcbJ^7c$E?>0Y^cgF;U7yZ71(y*h@nHDfzI|R9^hF=Np6y~6P4)1C1 zyiA)M10jR~uGwdtbklm-)h{INU8-b_uhG`xqj5BLS2@C=OoNM8>w2@dQyJlwfh*1& z$FW^lf`>A^Z@x+rqjA-Hli*C{HXnZS{qI&NRSpFvI6=LwNu6$UUNn!2%jUT#aA&l4=dx_^fn|3VS>BoMu_ zXX4>$TUF~BHe5rQ(mhV&RjmwGZq6d7&OQmgNsv7u!Knp!1vDULpJwW$>}Kv8!bIc@ zq(t}b4W5^r!oGd+W!`}_QP(PK{CzW=cx;ZldO1+XdX-Dx^wbfPNquVBbws1*H%23m zv=(Y{I<0%J!B>^n){|5l^x)U*s>&X)39wzP&bHb_f5VgF?K7NUMLZ_l`{a3Hi&L5E zr4&Ic{Omo-FwfH1S8A>ectPIbm6wpawQas>63|uFz8G}pL>Rj5<-}etoVjwjPYq># zuup$RwgNcXflM%GE(4}4CKc9Cc=v@nU?`q1@dJs3Dj%z_tu(_-%IOEsEFhqLGJ5?Y zxfE%Tt!+mcCxIXD(kz|UP~oVD6h4;9qG$~`YBOZzk zXh|EmVo!9n;ruLh&k?XTW88AD8M5A5fpabD`w3p!u)A)1_?GIL=y|*Prn46dwrGY2 zvMou>;`HH+UX(%nI((jiE%7`{+z&{rImKdEYo|q9JW+2cEXg-Ijje6=##CdagxwH; zkjQps{Ifyiz`T|Y#29AF&Ak1Y6Ws9$8h+rpwBv&ABn~NlmKyFvvDd>9{?aq z6nr*{HLy@kD$qDuh10nqX<@00%orD#h>VD;Z%&(HZQhzLk@K)XvHgwR#fyisLh8H; zTQwBhG8gAtgc5JQDya{Xa?a}G?*24ZZWE@p$kg#-?Gb`Z0a*EQR*Nl~%c7V}<0bEk z>w31w;Jk!z0YdOv8CM+Kg;aJUF1+=9IUhqMpf%h1FmUZ&cMF#GH{pP-0l>hvAs9LA zd?g7o@n)$>njhOQxN~}ua$LCnX3XxAcBTh=gGsTG_Hp+x~?&6_*B`Q-L*ZTxro^SgtydmOW~2P_08bMJvlSE|zW#4I0ela?dT zJ-YKuM_N7?s;Q0<*=5#UWNlVotz75}w@j)2Oi&9RIYwt4mEDyykydaUd1bq>+UZT8 z#V2PTC=fJ6He%Xr7T&9`8*K7T*(G13d*$&}-+?$a&W1-nNb)XAMjpu}g!immItT-$ z1y&nF%VB<6Ox={cPr-u*gue4l!h?JkGHe}+(V^d9Y$;oMB9dqy@z;vK6aajCpQ$f za(AZk5U#t_r}W9!YbTGdbe;!=0gCFkU2QQ(j|$Qs^nRm=F0v-ch+A9B6&hfdS{itv zBKM^yLq==C}DU`B(DzaZ3~ z9DRD**>S#wlSF^CXT88$^G8dWm*WL9dn+!BDz;oHAOITR78>pDb^rxk=PK*FZc3*$ zt4C`CG9MTEV#67^mgv>1Y;PpZ35X?o-1}Ouu)tb=DFBf4u@Dg8SA=XiHfR&N94BM( zV2h3p2xGiGnap!ZIJ9>sho+##+0bXLGB{W6rkf`jGjwa)2BcbDz> z$9Jcte+Vfu&4Wj<$rX&%Pn*iTd%Tz{28B zKNoBt&6hQc3Z4mZ=t+z539T#%tQHU@$8nLNiLXyIn@Pxv1?B&AV zlqoH#Q3Sn$v{q8C=Nxq2Phai9(?`RhH6KkV=@%r~w}@Ubpan1RT4B5#oTlkA)U452 ziDeA@TX|)(tFyrgn*$l4ayD$o+1xYbI59vJ9zO*v>O_gX6I(rH-QllWejH^MiYa~E zt}8Bk9Me}zzwI!#svEMTPml!PblwRavF4NnXGJBfxbkwdDj5&&OzV3cN2k}J+9Ov2Yj-L4w9$waBLZ!eDVs24 zy1X0_1raH)mq+^zBsCpHLwnnMDVLfV|IHSa2l-st40u3IP=w!|PhR%h><3ZKGf}1J z#bsf&}GqRV^HHZVuuGzy7zkiF2bN+o5%=PO6{GgYK4V zbENE2g}m&*g!6W_O9F?kfn;JER+yc_i_G~nm6FRF91{-8DrnyokmQ$-h)jSB%MYq# zw%h1M33&O9%r-4v4|R{{k{S*BxQmE2}1Q~wNFmp z_l)pZV`pT6B^|_7eQbOQ3+z3!cklLPwJIK1tBQt`VDRCG;@Ys^;AYYYO4WiE2VoSZ zQ3k-;cnHzRm`_@PJ;89LU14teO20jdIUlWyDhsLmy2v_*JM@u34+40dq)lo?BdH7w z{T+eB)k}XXqyD87L&n1`hUx0dtxTX6x*K;)hsH?5 zD@qxBJJ@$Yi{mq7dp@8{{0eu+SI2~dZ9^SiiZaw}(NO`M29ycb5{DK*S9zy|TO0w` z1h>Wvq7MZt@*XYwpTwr*bt18ypxS*H(*9)&qnfqB>`3rQ`E%J^jt zsts-(J2MDau0@e>#nP{76eO05VQZ(~=HdV?7k6S-4yWL&cvS78D#1I(i?FlzyJLpe zH<9KM%Xs4egzRUpgJ0zqTdJ{bEmdCF>;!xDTgnU1DGLYMxyxBWzYoJr;Esd4yJQn6 zz+0hh+`FcW9GH3M-A595?aCd8)}@%6Qw}|sun>uP*$sXxc@4=AVpv{Ice9dnznL=W ze9||PPC?gQ(FO%iZP7=qw z2z|I9h(@1(5S>j~NZ4i$I_qR`)JTXK`}az-zLj=}@WIdKWM9Yumh#xy$wC$pEa?HP7o^7N zk>octXXkZ!>`V@4bd#v6xdDM5NhDz?s~6`NayHs4qua_nS$j3C>}NTK(s{9uks}=AHxfPLaJZXqt*ztU z(x4dC))r~QyYRE33Ui8v*L;*RuuAdo6?_G;>OE)Hwp%k}5$4hzmB%5G?&N~0iU#;s z$tF$p)=zn=ZD#zIHu2f$4x5$^$o2;7HOnZA>y;PEz>1Md(*b#F8KYGZW@a$O&)me5 zTfraxZjg=GGp|qW7JLXaOWGCVgnj!wBwFfS%d*B7o!7)*s!lp0SaVXh9A&LbCs}CJ z8yCUDKNicXl*%;*G-d_^zEz-#Bt`wY5HZFhJZUuU7Cd?l=E|Tg?RkSngGg|W-$K_1 zo@nvhYA{Y&W%BGi>XpDod6mQE%*C{|79@V&8G7cjomuN)VM}BdF7`8ajNGAx#e^_f zLYTRN7MP}H{M+FnlS$&p!t~i>wBiU!tqYPN2=JsdS=l%=FKg>nQ^fPO3i>kLIsTr3 z+ck-{H(K=0_l91!#pBI&7izlG?SS9`r_s!*f>gw2nih>|syN$duVGNf)CUd^%5EuR z0fesT&a;pgmBL}_PFX>}+Zd6GL9e&oukNNM`;|KMFj(o}*wQqN?zj&gPwT7!0YGcs zBi3$?oT|Hg0juRM%a|1Wb^CULSE?apAqo$fv^y z3@8(P6O=0@15eD?-1=*%_Tr_51i2%>2XAP<16}AFIZt49GSl9RO|{G9idE5G!T=g> zo2X|mqr+QY8u`OjAJj!uDadKvtM5uxy=WT6&!4H9CY zg%0|KB_-;mtFifyKjZk5Iy#dsxOkW=crE7$q~gkDq+Q+_lqdWup_WmGd99tz1>5gw z0|ClF3BieicgyFkHHhx_$cb1JBiEoPjPSFIjGl&Mo2wlNIkXU+Kse_U{-o_B30qiq z%yp-)LIYz!Fvp**cY-0CssLmws?tr}g#YK&lG9hJr-VGIhw+`Ef4MrtR{U5C-2bfj301*pI>8I@5|k$Mgj*~^wWGj2h( zWt0(}V_qHou_$i0@?cq4r}&+{ThMknAjDR@`@+s(4a)TIK{2J{M3ww@v_vbbs4(^O zoHUS!Po|Gx_zJ1;jSFydt?I2Zw?1X>K^0=3OLNHeJvnkWTg&D)r|#+0 z&^<~<2KYoHx>Buea(+81Ej=<|L4F@<= z#EfE}#;0__>4ltfM<~PusYdD{{k&GSvjurtRm(!x;1i;H6L3{bf>>C9IdrU;t%u#G zR~eednH0t`Vhl3cObYiMeY*C3llvO?bpo1o#w><$>m;`l+VzI3e4Sr527}$-s4}GL zd(3=+{K6u*V}KzHL)3%&E&MRUFXSxY=k}q94L-KygHKRX#fDlnYyXcE=vcE+0;y{V z6SZJxXOj)cIaL%_GTDeDb1@2Hj8@H#)(p`d=F4z+m}XJi*ssMU3`DqZ!rXzZKl`Fq z#v*+^BDW)Z)^QGw0x7bI7m@RZ1A}^iRvCwu#Sz44hIH_Q$M0@zw82Vmc|0`)EzPdD z;3$T#qRIbe7liN$P=D_L)L@xxyjI55sOKTRG*o$Ye3+oqOfr&c1$TTr+&T5I@kH5y+l$n0ID45eJH2%Y zYR%PJ>DhE)Y@bJ#AGk+!8s@%kS+VTdW)sD}D?**QbKxXHmMMJ@WY9!KX7kxM%_$&B z_Z>|0=%ReAgWARW1M$upVLhs4fw@%(3bQ`5Q*A7%3Di52lWjly`%;z$%uQCg<*agF zJ9)ArxX?(x?zZOWxVD(~MsJAS-rl(X_DvrAq?BFvrmQ%&3+nArC*50v_(7^3AS8)| z{1GVJKoSD+xAr}!^-gxS|@4@XF=7kGIwE(Ws?z0Wqi zXLQQ6?ha5+8MT#JHD3RkWMCOaf-rvIHq}iYIOm;iEP02g>a|^p0CUD1v^Y0dsV{Iw zuqh))Fkxwz`flaTbofO0EIJpP&C(#Kln-*ndn9}|sJ=pY$=_GqT=m0;1q`!2*DIw~ zW}_%aFJ$}=F>{z&jETLDA=8eyONG6M z2t=5Z?9t194F8z-#PNOZ$&Tnt+I@ylB;EnF_xkV}hwwlG)x61a%fYF>bzs~A4QO+QdfbEIDALS2$IUQ#@OsOphV`Ia?Cxr1I~VTjvF^n3~|@Vs*W0; zGHnc5MLRv`Oko7jjM*SmddF_LEJf z)Sxdb5E0n6nX*jW)WG%5!&2>5l})$FdF~R41$fB+VJ*Jx=5K*7K_$nnANxq}%kL5} zawX_l8s$cZXw!Bj0ksb}$JXMJ_~!NyZ#*_r1NXWj_d1#fiL+hERaX|*nJp$Obalw$ zVH=;BQGm^}BB@kATC6dPb4vH&qt<(%Yts_ajwQHo{+kV?J~;!5)@`5~5;St`73Atb zXtU2DUhKj~d9+wNYnZEN7}%KueJRe4k1-;Ep6K_EK=hkDVpw0z$`!KZL&} z_(yYQ&HHURE1H3FghRqH-Dj_Jw${deC#I6Eo0CDNuC&Ux4LCsA4*RQ1HB;p8Nx$0m zs>pDbjykAKj2Kt*$RZ|O7k7@XNYnuA!1@Lp77bP@j1z;<1tCLxbCQ@Hn1}=wIh&v& zt-xNUpK#(W6ryPd^I*6_Nh*T`y<}7w)7)ICw)p{LtDe?JSDfO{iIR!dQ~8HzxNYxx ze2U8rXH#7oBwZv}O7{lB`#UxmQ`ur_x?fDPXek(hx&&o^6_A)Y*X8dE8pdm(HIVZK zpp`icIL%gH^Z+@7>^mx()}{T9p1QjUwntV7{xp!9OI?-Pl8WWQI1`Q83DPx(BLLRwu?eO;YXNN5S`1JIrL+>iQQswZy>rJDG;B) zSVmzQd*2+4fq23ChF}MV!3UM8*}<{l_s}P%)Vm`US?AS=VU8ZmUue@?#CRzi0lrdInYV*0iUA9d&R1v2`pU{Pw^`oZ!~#q^A`;? z>8;QE+InOb`M(*7f*}k(h74}nnAC+wE7>Gul{BYyt^C=acbjv@m^4dY{c2oHXy0+g zty2s=>)y6u^a(eK1*cwnEmu!LqR4d7<<7-3w6+Dh_%o={Hr7&75= z@G!>jKHnofQCM+~DfIT{dN)VkSLJXd=6!5gHB1l&9WZKlP6ny*jUn^aY8dJ$*wq)c zGOEy03Ok$!0foI`v zQB6yh$1ksiMg(_Nu0=aq%iC0m<`ja2v(~1a%6=EMn{M)~iF55Z~@^u**XV!??d?x9m@%ddT+MItZ8e2->^5gZsz6#>$Qm# zC2LKwmyiEhXVzNC_8!^>Tpg9$0V&tp5BIQf(fiaQ0D-8J$UaB8(As64XC~24b16B3 z8XX*KPG9#jUO)?{?m`;|$aK^GQkf2*Ef&F!+fWA3K#en>VSTEok7&2EBEp(6y5qQs zhF=r_bgdYm{f+046S>4GzgGn0IMDJ(7@MFGiPc*=%Pa!Xbj4p?Jo)<~mM)_YGHv{j z<5)9B0(>H#fL44r*I-uBW)(#U+`07dy2oZ5b`EpVd%dZ$QgyP**D?WI%g$>vTJ)!K z-zIFQ(M}W6*=N5Bqj2k+y;W_Mv3$`3`>Z!U9~RO{aS0XOt&$j%dH_2>#J{|c#bCrM z)u40{2_C!$D;z4zE0a^xk!+cQ(c*1^+s)f4&@f)0AK&!CAEBIP2CQq=+ODz1KXP#> z@xR9V0Qsd5r4TQNBdJa?r5pU&}?!uDQXHL6japz>^?>~=dgGKfnE6lgY( zls|?-H~1nILi=)lq*dDeK2?E*UqGDL?2x{wt>4xv+ufoTo(pN+?ld@iU`c?q^x}}J&mH+_T6LGD(}C+`c0`+zBXOmt3|+a` z+s{y9RUnowV)Mi&tXlcFQ0iv@=KHJ;&T61E^Kq)baj23Wg6rO7wWg0#>Zf(EO5`i4DhEI2`h}jtK z%nk9QuV|HCD1!~VTqIbw;I2qV`B+qt$Ob;EyH}jPRn?iLFv;{+sTo*Q#FSBC7`LcN zjC8OAH0zS%=1>|~HgRy|+}Iz}fqV!s+Q3Rqq<_!V9!iaNG)i5Z%sHWLzvN6=Ni_pI zvC>|*z`@**N@WYtF&`p2+pHu$(c?h&&Q*p01=9#Qj+nR4N@lbq8JnJ!D9!@NXmt&|d`@i5yhkUFc>!>8p`*-r5Bt_l zD~-w)W{2*|ZxCTdDec`Y1idpMf{&iw26F7+t4SCY_~nv?r2r7vLc5DrNQ1A#c9Ucl zGH+|_02>0y;^~i&7f{waB;QrvqyTZL31z+}DOYwWPn-dX18{f1F^{1NT^1Z4V@rFB z_UIP5LF;^-!un{$X!pQnWe$24wh_?iv^O<+9^9@>S6f)hF%tFWm1-I@3GAGRdg~pCeqUmIl-_SjnZaKjevfOaNuS2i;0(a{yJb5>UnRA&8p(W;lHojbPlwhs zz;i4da0(FRyprd5Fd&cMz-9Y%QHJN!vD4K>N2U9{nD?^dQyBGQ(Ng4EPpZiobtpc) zJ8w{mU{1F0#ec!jzho+)w}HBw>3?aZ;#+N~!!-BV7R?q)+B%E&n|2+*E+jZ}c!;%a zXgRd0PpjLbmW zeIHt}N(5AL^vTA8aIu}jHidfkR-dgCBAZbsgTr0)jrFc5#{xd@vxiSB{8u8ACNV-A z1%mG(q}K^Wl@eZSW$6yACSUZ2x2*=Y7s8u#7rcTa$I^RrNGhMowv_QD84LA>`zA zDu3xOfwXk`j%?>ntME*V-H8MPfzskptbP-U2T@KisdT>e%F1N` zqAsQ!tDEpmjJnG>PYxgpNhy@`XK6iY~?>gLU^f z;QVQjn(ajNC^z8h#I`JNRPW`ITR4RTd<*p!LBeNUHB#qz{#q?|Zxq z1|H(cJp%iK?05Vhb7z|*NvLDXElC0dS`Ol4|4V3dqIwVc>)EqAGq<`bGXkV@+{x4z zVCGJ;#;9pFL+tb#vfX8dp>W!I6Eqqt6e;1#^aY$bmx{gEBI-T2VK_)OfoS0hnh>u1 zGbgbhQnNDZJ^E6gke8K;Xta}sn^E2&-^w|`9jg?_=m0x|3iV)=tM{iI;##9jfb@dB;#~z06;)~H$N%&?bVGuq;B6qt% zP8SK$ zH@RUJM-&5#TC7PSyyf0_K44Bg7RTrdwrk4+EAc+y;EE>-xrJAQ_TFjc7GTJP)mu5` zO7XqX31ZB`<@EFmHRoC{J`dG>&6Hz%@l=K+vgbJ2qY*c39V*4=v$h}y1!ZW~buk#f zs|=G2OxM#_be*)Xw@yajz)RU#diR>vaWp6)J1b4gYYYt95RGJRS*RBXDyMW~Ulvy8 zK23RDb^UaygvssDj}<5l8s8uhjq)*{C6tFA8I!6k0Vnk}r?`4sM`tMArA3j*z!7-bRw@uxsEQ zxfUHam=V-^B~GpzMAT|I^X5vXAL2EP2aGBfCj|!aNX({y^Cth;UK!_?RSfLaU8|IF z=r$47K*tyR+IpLNH{gS1*^)T{5)X%63(;x9rPvobd>=3KdnKd|_eDk8y>UN97&flW z0#|~RG~O#TdLX4(Te!D5c}>>4XMacfhRa6Tw>^RIWwb43e}&3LA<))(r3p@YImwP^ zC?0i>QJN0Tx4CzYgDx-X3xL4%8>o~-ZN98%FSR5(3FUHz7)sZQ&!|4 zuC{MJ33s9ZA@g^+u$Oj7ur;7w2$q7BKDHmQ4ig&{Dy1D%*wHq0Vhj?hN#XFlE$#`9BaH5?Z5L%NBfxdvh zxWtdeVJujA!>jT@#kmhW)Wa6PfgG_H)3;hldDWMR?=mY>s5P|iE$=^{^p(boKcUi1 zz+oF&h86hT_2M<_r^BxV(~AOTcv%W-Q=v(WD-w$@_7Tg@ixtBQ(4z)ZC_XvFeBv)Y znHAs&{rUbT=5Rd9K12{HU2lwvEV?H&Xd8FED>l?LHY=%p?Lrg(lxuBp=kb6y(VnlM zQmN~PM7wJ9Aw+#a>A%zlXUA6Hij#4eIYk&*g5b2~!a;LN2H*r?Obo4TY+NMN<-N~+ zg`?61I6%k0GoR0QtRf3HCS5)=-VOmSpqh&?#+zTDr(mqRYl zzin-B0}AOW9pqIbN(`9%+3XK);4INap6FPb1z^xgeBRQ?Y*#@`czLDDKn6>TF`i(E z*%r7OXkJA44_#Gl0otZN*2>$^4XL{gg``IRX8VLnR02)|jK8-;p_6jx7R^eu1zJ09 z6lcm41PUCbVgDQolhY-b!fuNt@~8~Te&B@t08E{CkjHl79pw(QvpdCxI6}styQ3X zEKBR#N4%hEb)LOtfZTsxLY99RO|D2yd7|((8rTvkO7FhiXNgo!L1Sal*o;*cJV1J4 z)L?-#u@ex*R2W^xZo_I2Agi20`0wE9NTRknkSwI#$)l#!AhM7cSlVxC<5^tS zciAJ+F=`yrHwqG0=V<~Jlx-U;z}Y+MAYBEKG|p>$%e)N;t&P4|8a*xIIR1vT?6a`Q zOxE@ltn7YdrdW!ztj&3qpyrU9-NvQP1gDf?80utQ2W$W>2!f_OehbO_XN834JQxHL z(?;;SgX-S5Hs`ZD_^p~@7N*QSL966=%2dJ$v?;we&hqB4t_zWUp3aSH4^cbPy;~Yf zEn$YEfZ)Jbmt+7x`<`&#Hu*OmZurYO@Mi`+a(1g71pDPMi7D|7w@5;6E>Le>c?)fGCWhe(%^BMO{$?Ug1~B=DLk@6m*gW%(hA z$-aYtA;+@i;XKt^X^~9+`oyh^y%|Fg<-`qH^?P_!TI{P{l$L8603I7^mqqna&_WCn zjROX8WX!jW(U-qgDc8)!8xkcsWqNsOIBmQ)pw>cAV?PBxfr}okd;SF6BrlioGWQ&l zs=!JR$Q%4>!1_oUrO1FgMJ)zJdkeTKY#)zL^}tz>ENXRc{iI^*(;;bQN3F3nn~n=?BD6XTx_ogQecuS6T|+ z6_PP&4&din7SGm7ZnZ)mdH8#3)+oGuyoJXOz1_j+jeGS8h&dc&Z-Ll|^ZQz7ZJE8^ zRd}gcAKc9^O$oa2q@tofb3$(h?MP{41WG-)W6!n)_J4%Ca^l@uX`#exJ=xwqf}{{JJI#04xEg)ML9}&}*x_)xfB%Fa-=su5ro=07a)JJ?;)dR3VQN zTH-a;?tBWRvZIp(K5R?JVk{4v=uXcZR>2mmI`rHE``_DJ9#^~PX({m1jyVZh+pAvo z+dOp@R=*C^MPM?X8eV}{a*P~uUm$&s%}xGNnpU8mv#&|nysjMEPlA3p1ijfi&GdUY zIZl4*>I?BY8<1>3{e?~R`*H=xc>Y*b5^f@BJ0;P}M}b5P(YMvS{DwuN!astw%;Sh5 zRZjNn6EoKpvF#I?gn@>ellSX&W|y2yiCa6E-m`8y8!HT-A?Y`lDUg>9ejndT?WayU z?q6p_xpMS=UY6wtEE_-JJ%&83tU+(-8(2&26EDMph2SwP>pgw;K(Y%mT^I1-sVHI4z89iv(kIx+P{LSKv%Z7k~$>U5)7^wQ7#@w^Z3y`L1#k&$2l(@I%zqdLb;+ z36>`04lZ;sR)s1A5=vTK%BoEoXQ*VD)`4*Hyz6AZh*Pz4;bLiJNlSm8-BxpD*@5N$ zRB26lE7n6|nVEFo26T$Y^BvnNj4P6t@3Y{e(B@SV(>c~4I#?iyF#OzhD`M8Q#YqB< z^;GbcRDDBBdX9zrPbeHqEK;98lMd_?)NbL{0q!djz_E<fKTgN|Ld4TL3?obIHg_Wlg#f*je()` zEr!n9OZs|5rDqXk-9$MGX58T^f{u8JwN|fA=^CNP+e-ttt9WlT>Y+KNg-|K40xo(4 z^;sQ_cy@)&c&r7Z7zkvQ&Fov1HdyN-6U-ZYarnvfi(5CQe`4?N0S&Qin)oNJ486pV zIfRN&RJ{f~B4Ht9(~BgTr!YI7T)kZ|j6}tQv70?m`n>~%m3<&P}D?OWawKg(IZT}90T&z0c7QEW<@x#Ww5q7 ztrL!>-lVd6=d4TKqm4GDqT?9f{cbQD3JPn$++Sj*cLBTZ@Po!K{-m+mMmtql`S)0= z0Vjm2ay39IRy?XecsyvsV)*zZ45ke3S(vw#f)FSf-D-Gy5xt8O48sM!s55UH2ewzE z{7on^1?uE`E{t-JwiA~_AOZWQTd~{ik)gz=_4m?tfZh}Z!R^zjw5V0uo4egZgZq*v zWtPpWxU}SDyK$OZ0!Afe*Y1up@Lu!ohU)U|BgPpQAGdiD?iH`on^CtIPUqE%820Pz zmIrj*XsJ%_nLKYJeNbF$I&&Rdr0mDaB|>xISgfl{4k2H_heD7Bu*jaKuRR9QLfJy@ zJwdD^g+#@qt5oX$WxNw=65YR6?|QrX4F;MT94S|I1lv<il0HYYLd5lA9z^BjEV8%pn|UilQwdDjNt$!L~m zzcJtwFi*%XmMnp`RvGfqnFjDaDF?o!aG}VMqji06%DF~4RCbC0yO@x3x*uwg$Q}p? ztqlfmJ)m!EK&PMq(ONO}t^*XGDhUDdzGyFcT5Mg+R3+S^@(jDxE+NOlMrObT2zh82 zP0lg3^hCMADwh!t3p_rx!XI(`PdXif@`DB5dtqEJwa57M~m*YJP`);}WpU49V30I%P!;mcgCH~&ZAlf#T zCu&+CR`?V^r&ET))79=elt85{CK_^38HzSKN|k~b?ufA&P=O*ymH>>%ctzdY5x*0b zcr$4HBX?Fid4?oeIS87g#ONXuN+5lV=Ga#H9>;228|ao8*H$i#rPU!i7k1{CVDkX8%`W?$T;!PDHse30T=}}G_!@`PJBTa7qufOXHI3~-$t3F{K)GueXGRa_|Kbji(ASz45fx`qJ? zt8t6NRiXfgU{pungthpSAF;;l>ED;K3i3E~PKAM}<;Kq_3KOThPGaXQjaSLXVtTh_ zsNpv$$M*6uy{a~$(?~ReLUe2=A2uw?+a;YnPuWo%U|Tp#i+a631OyL~JFq)wfhr14 zU58MMJIqe*=2E@U3mXBW+0bFr7D6aMjeibuZy5L{R#HDaOL9&AD@b;=5rvm+OOB3< z=o#45deJD6lv;5G4j zM~{oLk`xuruL=<6yHh$OO#{0*JnNWf8O)CkyY;k65w#W&S1+UIStp_9X*Kn6os@E0 zrz^@L4H+yEIv?n;=gE2wJ$~GJSOl#|bbP$rmq>U$%~8Djd4meYc?^posbON(CD9_a zTN>+p8J&6rM9aoyyPTNLb8qC(-hk$DUb$K4J2#$!1c{_E>C?QbwGQ?wLuDvU2HWrW zdUV~d26l64k+pgW12SlPU3j6v1?t>kuPbt-v%H0VW4wGfPp8$3KPO=_EAAu;WI@zEdZ}yA zm}^ZKG!)ce|z%(CBs zv&naMJi+twb5aYK1ow?!k>*GO8LL>P-0CLK4i}01%_xpANh)aHz`9q5DUeK%@eoDz zVWy1bEexr#>V!)eB0MR!zTZ_G-joy&dc7U;Zi@wzQ3QJpO}e$b>=|WQ!!o@NLGj&Z zLIC8YKy}C%0+4#qMFWh3|3jP`4RY?0Xql-pAi(8 z_tC-cNvv0v>_$qml>k5tKZZ9yf9pxCa(W(|rI+H=)dLy5(k!+~qxr^OEsy24&2ndB ztD6T9wi7?)vvB*rhUiyw$Bt{{8U&2cO5AqiE>HjMy)XDiFH@oDWz^;@4<7 zAAkCsc()zEfgDgcFKE9V9qNP7(&5#Gtbj)o*TFKN37cwZx5hLCf~05_pnRn_qZQ^7 zbn{il6HGun(FI+^dS!I)jeppVzJo|mYXbZaCScDp7qB56%R2=u^lVe~L&N;Q44Q%B zlTUpsn6~3wqAIU$eH%kUC@plgs>q5(V|daLqG+}{<5yCN`w92RoMOLRA!J{4Gj0G6_5`-jAbU~iRCcZON6Ri$;zsOpDL-1)X3zS| z1z|5hYypdR(}2fO1ip{8HIb!NWfSCI9nxry$B>8~uS0irD~z*Vh98k03L+7ZNodxM z?4@_&_Xnt*j@if>AS-6W){K7Rmg5j?Ivj557o5IsF(7Zj*Kd1&b}-#2Q2GRsfeUZ; z=L`rko*)wr@AzO$3fP2LKR0KVLy8Ajc^)gx@M3%O33}gJIts#`9=Z4d!GDUu2gv*5PS&xTmEUsorr4WI0~U`>q(A2CQ@8wAu7HO;Mf;9pc7H$4}an zEAVXs@$oV2?Obb-an+KvtOTWaFE~n1_vU9(4&U`crPN-&S$8D~lXXc&1nCJpBae$esG1HdtQjti4LG&q`5MZHnS8#2C% zJuc-b6NfQ;zJcv+HZrefk|=>LtMn++7yEva4TOuv9?`}D)l+y`Q??^d9?#^wz}12p z1_Bhjvnk-5sWZkxyK4L_aI zr#b^iqV#}mq5m$reP@dq#^wTfRfwHS*>~tZmlpKx>st(sIS->QYUa0otP6i&xm|$o zpE9P883hjMAUH zfgSjP0_=)q(apBToQt=7oubj~rLAvyse@CJDZnls`e7gF4bAVdsfUD#tG5b78py+z z3lnSmev>o7Ib8)uW+U^q-sOH$=0~&99YY^o2@XRj3LlE1OYMVI#K8oKEh`63jfEyU zMr{b~GcMx5cVg|mH#*M+)KUZ$th&scL}X*vcbR0e$`pB>d*e^Qz6*VMkGES#4cZeI z$Ae`vPr5o*tqZMJ?sQ?bzZ+S*1w;*}{5qBEn&%~cnl}$%!|VsiBGK7W!4u+sPe+7( z{5++$2UyDKQQlDH`g|_IF2)11bh}gs4O5hE<=bC4YJgOu9a4kI3T04|U)Q{@x{Dn7;5-d$5hAq>gkB~hmuQ$Ie1N5RB#uaz!K2F%S zRlGdi4xLBRj$TnUMS~PFUmyqzrBG-?mQ>fm=rj~D4bgV|r?{6v(_vc}ny8nMCsso& zKvRGj#`yA%dk;psD1*;Q{Bwz6m^UAmk~}GI?4(0_78!*IN?ZHuLcDd-@;%!V>MdxR zOvHvbn$CqNFp3~_#pu?N z5WDP#x}we+41CJ+7_r|)5ur4u(QNybJ7;rh_m@SBqcj7$qFX@%0w|xS2z z*X?U79}Q$FU{+=krtGc9UPtCGhlvW^wz;8Y+B1Wq;-;lWsSJV;+TeZdxXX(scET-b@3|0Va^=Mk*|;RrF)^k9Fdo{P1e+E9tD!#v^l_FMCwU9is6 z2Q@-UGV|U_t&xSmT9uOaE``fmN@24$@CjnswW&7dyWIZ(<&udB_a=P;1|)z}y^|!K z=+ZsoKqGubIE0L=(p@}&>+gm@%~dYDn#I5n#n?{rGHR!>gH5;yeiPaUL}qNIY8vjs zobSkD72^s*mHU)@6Mu&@@#-bdQ7wT%L02D8L0yBg+qjJ5+hJ=Q{gGtAdHffwS_zwsk*@5V{n`Vcce z_szCuV|Z!Ag~>k5;%_7GbwH56Cu8JWq3j8WC2P$P*_R_*G&>WkD#J{|+cfrtXu7nv z8kt~u)fgydufR41uE637a3-mE=2-_N5*mmy;4iJ(nWQ-TFw|CccKj7$@X~8fOC500fS>qspRQOox(Ze5!dv&v!?{Z zVdR*7;1;P%wo+&E$b*@+CKna1;CrF`?ITE$G5O=BJqBP1d?e6gcg=0jf5<(e4O_gC z3L%;6r9}icJ7!MVXdNw!JxHHpBb#fC(>^FFYTW5{7;@5enJ6{iuHfA^Z&f7~z@pvA zY!lsvAUVd}dp^pMmWL0s2@85chElQy&3P(s!+@-Lp|b7Ug@t%a{_EK<Wv5CnA z)9_A*s)JH*9fzGMu_lJV(+75&UM?p4Oks6k&Y-z24)F_)?AdA+Fc0q2-s;d`{&omeyOqBa@wpQERPqqy62nq^IY+^u*5GaJ!qLhEj1a(lqB#|e~oc7~%nK7-$wxVhIi^j$?mdVm&dcG*G-oxwTn`i#0A-eLpEUbGCr zOkLn}*m|MFGU=3#seC2|62F(ZQQVLWxX53Gy2AqN&65WT{w%mNd zj(K~HZSYoa;}jN~GddCZ%Fr6`Ia-Zf+FzFCu+D(8vl4pA8HK%)UEEv>ViSj1SyWHj z>dt#Niiju0!OOZkw5Fl6z!f}J2yn~s@}n)O@8C-lKBn~LrkeEh%$l^F3Lz>@DJMMKxX_{e3Z|8^bOAj!)zkj0JA#mBIgL1 z_t>$;*>`s%y2I1aR-1LjxCMtzL53#V_+Q%DWn81Dse6PjFSvwY8dIrA{^FOCHYTuE za*ucZIRj)$J@U4m*23!9L*Rqa6;4X{b)yjW`ks!P6U*>@tkMyNa!u4C?WI{~JaeB9 zPaWO~?ag|qE3s?T(iK-b{uw0)~Ow9V^ zzU=(WQ zT0r!F4>}2hyW}DWjQq#7D*`5R=M3qY9#slr8B%$!PAG&6@Ue`h40@cjRL)ufn>-Q3 zo5ai5b)G!^vX!5kE!H3fsheJwGD3gx5jzwuuXSQe7o5`|&EQa5PW5}^CB+ZuOF0JW zTe+aObBH2U<%l~xi4|^u5!H74jolPX|8j1vQAa_@TU&8~5~IxG zg?>#>NWlBq#qMv+7xd&gR9I_Z(q5#wKP3jZ?Xin)qw9W*EDZ#soh7iUiOp89Y%F_^ zAzaObyo=qEv!g%Q3t%9j19^{0DqHLT*Wti4TShz;o*0B&Eqk)vnC`k2|0>FsfTB7uFLLy$wL_cXRuX{wpzw~fb=Pijw%33{8lV&Y&{Bv zvlJ8#HO7tzpRq9H06M_Ht0xi=a;$qBDl3QR#Op7JUdZ&hHO^w>m*u!U7%StFb?`Rj z*yG$$w+(P1Ky(gvrDxELO1PG1jh5;P9C?+NCI zb}Vruh3CF@yC{^|`onSGt{hdoD3*d3)09%6_wi0bZ@jWqU#zI^udu#ZB49I-RuZyXI#b%pt~u zqKx;4SRJHFKy9E|sxtgkXKkF9cQm92rr%j)R}NNtz7yLaMv8kN_CUKmA7r#noV#YV z)6&@Rmc04BNQg1eus-gfgZQc9J(}2nK?4+zdxG!1w+-iZD>mPloPoLM2j19Y8(84; zp|5@qhUXGRAHT`*4z)|Qs=?6XUeXopg$}a^B&mf_aWh`orQvma>@FwzSWKC$ohI68 z`Aa6ObeT2SaJ{+an-q6nTuFCCy~fn5<-TBS-QT^KC|C#HdUpL&Emj_$(At+J`a(c- zhT_Nec~F!|(XUTKdNJ6lm@}k;eZR^JJaO@8a}~0MY+spfY2)xty74jx-`vvhf1Mo! zq|eMIcy_J}@U)o3N zBgOJA0Yy8f?x$hkUIacA1=1#pfb0{TUQ3$nq)~)TJnS(LI9T443i^X3NxF3Q%UAWQ zPaR>XJ{Orq{B5k@1Fa!oi>+&uY-J703QEa0qtMLBL1DqIn~7O=6G&Zqh4#tWGL`3m zw8A~K!B4#QeuS}dsPq`6LLQQhrf%DsbM>VAJnL{j3Uz(#2F9+1rPEoHIx!axbz01~ zAlAxNF%^{K9Te`$L;rXK3c+70T2*p2+)z623l+iB!KHe+^Nh9@mdrt&Wayhr>}U>m z{!ZxOw6otqsM=D*Lclxn8a}*3r;pe*Y~~(33i)Mi;P<|+1w50}(B^`d*V>A_H>Dvk zslxUJbo|y5gcTZ38j^B+rdIc7^ls$mt;B)9ky2-tK&U26kAa z%-(Jpg4>}rcH!f0?dxd^23Izv>m&@zE^)H~$Ed-wRI*B)cAzLoq1BDr0NT2 zd{C&|J5HxXcysw0RR-LYf(v1FrZ%3V3E-#?1&^v~75f&(bG6cQk#$z&255rtYa)1S z40qPqyS>k~@bMb&l&G-c4ntci5WGbBb4&~l#u}>E-ee?{Djwnm2pV;jg(x?Z3Us%p zMdWBxj0KM%swwus;c^#V_Dv)@15DN>$8#1JhJsqQ*1T(sJ~y3_C7>8`*V8D%nT}TX z1txeRW(%Hn&?06(9aqze@Ifv3*?ZqPmWHQyCa+ew0M;q3N-iZpVaBZhvl+zNTj$H9 zUo0LO*kIi68&nBuGcO~Ukgzi3Bq{7hv+=ipG>`f($~alLI=wOYGqPrX(&g6Jv7FHT zFi0OhV>D)hV{K+zEVlV5FRB@D_TS53qioBNbaL?7*Y)A!?#+qSy>kFWh|b~6W|ofH z4iIHLPW%93(RHctE)|{+<>+V^5+kR&Nv-ZiH91ls0s~&cW^)Ud0yb@v>N>k!lsxJ> z<}F$yO9v*1Ui8w6KfpwkS;$&6VyotRM`Zj;`|Yn4tSRi&4l80%K0G(i$S-_#^wO?6^8I7R$^Tkt2n;Bw=$V@O3< zK~&exFY25}$2)V~CNFiVCH62U%+SW5I^vj>+$ljd^rei}CsiI_MRT)9XoNDkQIc?75FwHi zRb_QR-x`b-xTyhk6=OKBsd6rNKIcS{p$_sMK2_K&iW=QFSg~xY0OpmqY&>Ip{iAx% z#j-?uXzwL9Z(W&I_?`2B(wkV2g;2Bv?C^Tp2IGpMqx}XOyduw_=tpnxz`ez{T`9HQ zI+;g%sjc7}8kM0muxj-07k06c z(H>9a@dH1?tUGBuUKC1l2Aa1%vZzdDD+xlXfw11IHyp!R>Uj9^b-R+m!H-;}Sm*hG zq60z)C-m+!I>V8zw?Y5SSBbq85-Cb?2VUes+`A#`mf8xQtK~9sQ$1N#dyMz|A2Bi2ZX&>BY3h+NIH$p zW6)DSN)z<*g}aAR?NjLTNa<1TU08spok~{$BAVKI9JiZZSUQ~?1!~D)iYNFwBoQg1 zUL1fMR+tN)!AGXKReX#Eb*SpD$Kkr}>T%kBVlTYw5E`$0 z88Sw&(LyF_PNj)c*6zrWav!oR;Z`jX+^pWm6y%@@*(+9hJT0z0AI|GgGlDZH0VHb} z`^a_ESl?7kfL`{AU!soZi}o~z4NARM-U-f~5-b2X*m^o&!`R1yzET5Ne`)5#JBj=O zD`TY25gimDvw!}Cd`d3;&T(tOJEFmB6{*{i+nCxeqBrxrvU$g=%!FT1A>N#Zt2Au} z(7qQug^n_O=h(C};nJ6_%rG-{vF;Mx7!gZpgP=B<%zK5k{e|$qMUO@4GEeNkYM{> zgKRtw!Fvx|DtrfRoOucxqrO*7h>Tp49?QnGnwG-3%u2R!(rTb=VwLSh$K~^~3o*vl zx&B4l(>Nc>(;{-BaY(fl_FWd1sTFo2Zc*l{y~XuKo@3XWE{bM`l=_z!5Z}s2oJPGr zqRp&edx;|Fl;&IJW+K+Of=EWc*F>1HX|3-bL5^MFu`F{t4R`YthbS|AJpRA~$11&ukc zy*6J^6O)B$Q)PngrTVOZyNSm?t2aC$LR2J=DV9I4;$7#KTV_@E+iOxn>DdZxo->H2 zEP3^k-lGU!Q_x}yT7QEGH7Z<3&Mfon2Vf-P=YtWH@x;tjLml$T8$=pCxvdBCWgSf3 z6=Vg#6Z9NSXMgn<%9JGwApE-3>UvjbrYj6@^f?785lp!(i?dymd9mM$jmB)8+>X|T z?}d_MJ~p_a*c%ZF6ls+LB6-Gh{Vha~6I4Q5scZ2IIzbSGK=VnfZ8L)=5isaAJ9tet zlYAp!R}urW+e{xMn-D7~`>?TB{7wop=h7seNR>_7e%?Gh26{=AW2ui+7NSeb1Y^QamAIt#Q53ul|S207e@7)G>jWd)|M3mcIcP)ZAlWjRq-)F^(r$>pF67fdxhd9nE6EU37SH!$}f9 zok?$48@ZrB$=9aSVszSoq$Q@6ma87e@EZyP)yvaM)hT%MP=QfKNx;8OA~+wPxV}ss z#+lK;Ud6OV-@nzvfT0&@p!oPL7^cAYs9T^*6$}uW(z~;g{IVC^!fHSXyBKqak@yLB zX&{g2nt{;LyU0B|Y&mH!2YSi|*3Of7t;$ln8dfBZ)?D!0V|}(a54+4vxSHOj?A>N; z@?oV=g1IRb!pLOYOM?hj0!j}aRc|#461gqzf;@4~NxG&SVF9T4>238PSt^JFyNE&= z9eT6#U`fb@5!#|#EtHGas8oJvbME9822NPp_I}CYWPZ%q%g-oUoS>#GHaZN{`v`>-Dh1;y6HS^CP!o59lWwa`PJWdcATt?<~?4^s7UH3^bWd(TU%G5JpmEqbv@Jk z1dYLal(u~g9ckhcjhavN^?U~Li6-67sw76qHJhwP%B6riTa&P6d0_6f&Q2o4WASgs z`-?|K`6koEI!G*VpIDqEzbIOEQ`^X)7@&^}nHS4v_MQb)^p-&eeutF?p{M}7X>Z5} zPtm&4Dn;ou$49@-D*###wqP!Dr--1DViHDm7KxsC74sWm}T;zVM)R>m8&$ z5ad12W|2cGiGcIt$PSNmuc6%%|@R7W+h)=EEXL{#E19b^?;j$a~^PN17(Ci zIv`1e-4-S@x~mWcmCc(sHLqL4o*b3%Vfwz^r=?sH_INJIa%I%+|)J z?@$zXx?ZF}wKbA-8mLO|AXE#!xTz#)a{(GFpzV>kB2xGqzJ7<40 zXdK_=Tfpg7&{Xe(iasAYFr?$WoF1MLh>NCo+L zl$SMd5{|O-o!2H=l1pZn$o7j|;@yLH)#@4amn-=3!J~bj(`Fc<)4mzPDi>PHFUD_# zZhhc;1amnl0b^qUM>mMc^AOdE-1UJ&?=1c*0b{DNk(OQZ<2zz;bD(g0lvDV+bMtDF zqd3xVG7l`J1~FcB>6;Wb?8a=y7w32hVA$Kwnx`Ev`$Fx#O}5t@<5fbhZNoqTG0>Wh zHsT$kpE-fAYs7uwjRMEJY@=H+#xak3v!Nz4a}&!nGvI%%f4Xb)Utuy6?z z802sWqSs^z#B;PP9rowP$e~v;nUC;s1o?Q^12Uy>fS>KK!j8+7i4Giv;|*c+g!hZP zc&u}}&pj?N$*3Sqg)LBJE?8TikS3>@a@@mSe1%yJIGDx`fY$3%cJ_xAyxO?FZ{Ky# z7Anm~@ePh{(4=NMx8YZUQpOzCMg>Q?F|TzW1N|rqq`@$9Zl;j{XDcHCUcW~eqvjUd z;3C1Sl`8}OvzGfK1T%EJK)=9n>~qYyv#yDfW~2yuLfZc4sR~LfR7s!OMNS28)GLV0 zQx{SopW^-2MhY%of0jN0vYNdDu+M?#s{DBum(s8wA(%OG?$d$fV*J*20qjKbmaEc$ z&h{)R;I%-t8hDE6J}AztwjTk#ICw5&yhLS1OFa)sbDg|$UP_?Bc#8@bJ-p{ax7c4Z z;5^GjLy%!?1Mxgz z8kJ07?VGDrwOIIRG)*oQT53Y(3bKTd$>`&tsorwOF^0ucAgT)jj=ZgGbzyB9h^2U1 zG8pae)MQR@ojnKk@m#Tuya@lRoN!pebjVrK%9OP*>8;^dVE5%6OF9w(#XBf&24t}C zrbJPD+_Qqj2@*!Xt)`xr7Xpn*{pG%N7k(7z5}g3;Wxz+;d(B!Ddz40M60q>qaYWx2 z;h!e8mH<>htG^CQv7a9Oo?2}_0I1{`D#29GnG9`5>H=je(QXIF2MP0hVr6KfAAZJb3b9 z;H|-G>xhZ)k>OQHUEL9#&3+Bzqx^U-3$LYd_W%WgdMQ~(ia`EopMHYbY*cg4Sq z8;drgm^eQqTU3^nz_Gb_QaLHk($4nY)@PFEB_B+^lJeDraht;#Em8SFD@HQ4!aMG* zmt9*JYvx_~?L@6gECX$*&i7fsvsTy{GzzyAQJZA5V{`LACl~o?U-#CBp{YYa4CtXm z(#{^JHwu~pPkyd*4#F1uK5trWu7-HW5`P^>@<^O9@r>@gMSSdVs~HQHgd zhqdT#7E}Y@!@VG?O*ZchS_5(E=NX&o5v#3-T$shMTqH+|{<%$KacBJ?e8LY8d3@ zRnnc#&&xG�TJ>N;0f)S#8CbP7?N)GUnU{Bu+=g7S+IOlx zAfiT_O}0ZK8FKDo(Xv{p%u2-p34e&OWZufm77HWe*&O{Z(>_KpE>rtZf~d zmy;EKQyS7pU^WK;;S$12EIOAw zebPYi^1Gd~-@ASITO{>+dTA?Ogaw=_Ew}??Gw^jn@>>Wx{FkkE~ zIkId3K^Ijac8W%A|9#SpY_G0z@(TVz+l>E8T`L^y4zDZm*zd8_f+J*?xD8F-T!Zyk zke%*>(~2D=M^aE9EASqa?6}d&i%{%_gbjI{VGP`!OV}3YF$}F`0OV8VL6D#U;OHXy zTzxHY;k_(loex*6`Q({GO_`9YP*vMy(l-MMoaGr=9(%OYdVJj1-GzC6Tpc(*@aFnq zo3v=$Tt4!M8FH?E2Ak^1RkD$gK<7hxEdkNqy4lr%ZwkA-G}5oPIw7VqjX|;(fkcoP zABC#h>XSVY{!@DC1bGn`Z}zU-T16%rARg@)w+z0kK<^r@uJW3Ve9<`;tczk+(D7~h z)H~{FI*gWjnO&(YZ{iS(±@)ew@;?rLct`wbsi1DsHg+yn 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�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

    en!Rl41@x7u=-$_Grv$t~DjyF@naa(-MM`)Md4N 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 TU)y!!2fXt;%+$pAwxJFH4;?CH literal 0 HcmV?d00001 diff --git a/subgraph/package.json b/subgraph/package.json index d48325d..2df273c 100644 --- a/subgraph/package.json +++ b/subgraph/package.json @@ -5,14 +5,14 @@ "codegen": "graph codegen", "build": "graph build", "deploy": "goldsky subgraph deploy pdp/1.0.0 --path ./", - "create-local": "graph create --node http://localhost:8020/ pd", - "remove-local": "graph remove --node http://localhost:8020/ pd", - "deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 pd", + "create-local": "graph create --node http://192.168.11.154:8020/ pd/pdp-explorer", + "remove-local": "graph remove --node http://192.168.11.154:8020/ pd/pdp-explorer", + "deploy-local": "graph deploy --node http://192.168.11.154:8020/ --ipfs http://192.168.11.154:5001 pd/pdp-explorer", "test": "graph test" }, "dependencies": { - "@graphprotocol/graph-cli": "0.97.0", - "@graphprotocol/graph-ts": "0.37.0" + "@graphprotocol/graph-cli": "^0.97.1", + "@graphprotocol/graph-ts": "^0.38.1" }, "devDependencies": { "matchstick-as": "0.6.0" diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index 7dab13c..e72f679 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -6,11 +6,11 @@ schema: dataSources: - kind: ethereum name: PDPVerifier - network: filecoin-testnet + network: filecoin source: - address: "0x5A23b7df87f59A291C26A2A1d684AD03Ce9B68DC" + address: "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6" abi: PDPVerifier - startBlock: 2473969 + startBlock: 4853581 mapping: kind: ethereum/events apiVersion: 0.0.9 @@ -52,11 +52,11 @@ dataSources: file: ./src/pdp-verifier.ts - kind: ethereum name: PDPService - network: filecoin-testnet + network: filecoin source: - address: "0x6170dE2b09b404776197485F3dc6c968Ef948505" + address: "0x805370387fA5Bd8053FD8f7B2da4055B9a4f8019" abi: PDPService - startBlock: 2474017 + startBlock: 4853585 mapping: kind: ethereum/events apiVersion: 0.0.9 diff --git a/subgraph/utils/index.ts b/subgraph/utils/index.ts index f9d8c61..65d7eb1 100644 --- a/subgraph/utils/index.ts +++ b/subgraph/utils/index.ts @@ -1,4 +1,4 @@ -export const PDPVerifierAddress = "0x5A23b7df87f59A291C26A2A1d684AD03Ce9B68DC"; +export const PDPVerifierAddress = "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6"; export const NumChallenges = 5; diff --git a/subgraph/yarn.lock b/subgraph/yarn.lock index 05b12f8..faee0f0 100644 --- a/subgraph/yarn.lock +++ b/subgraph/yarn.lock @@ -3,34 +3,39 @@ "@babel/code-frame@^7.0.0": - version "7.26.2" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== dependencies: - "@babel/helper-validator-identifier" "^7.25.9" + "@babel/helper-validator-identifier" "^7.27.1" js-tokens "^4.0.0" - picocolors "^1.0.0" + picocolors "^1.1.1" -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== "@chainsafe/is-ip@^2.0.1": version "2.1.0" - resolved "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/@chainsafe/is-ip/-/is-ip-2.1.0.tgz#ba9ac32acd9027698e0b56b91c7af069d28d7931" integrity sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w== "@chainsafe/netmask@^2.0.0": version "2.0.0" - resolved "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/@chainsafe/netmask/-/netmask-2.0.0.tgz#0d4a75f47919f65011da4327a3845c9661f1038a" integrity sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg== dependencies: "@chainsafe/is-ip" "^2.0.1" +"@fastify/busboy@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.1.1.tgz#af3aea7f1e52ec916d8b5c9dcc0f09d4c060a3fc" + integrity sha512-5DGmA8FTdB2XbDeEwc/5ZXBl6UbBAyBOOLlPuBnZ/N1SwdH9Ii+cOX3tBROlDgcTXxjOYnLMVoKk9+FXAw0CJw== + "@float-capital/float-subgraph-uncrashable@0.0.0-internal-testing.5": version "0.0.0-internal-testing.5" - resolved "https://registry.npmjs.org/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz" + resolved "https://registry.yarnpkg.com/@float-capital/float-subgraph-uncrashable/-/float-subgraph-uncrashable-0.0.0-internal-testing.5.tgz#060f98440f6e410812766c5b040952d2d02e2b73" integrity sha512-yZ0H5e3EpAYKokX/AbtplzlvSxEJY7ZfpvQyDzyODkks0hakAAlDG6fQu1SlDJMWorY7bbq1j7fCiFeTWci6TA== dependencies: "@rescript/std" "9.0.0" @@ -38,13 +43,13 @@ graphql-import-node "^0.0.5" js-yaml "^4.1.0" -"@graphprotocol/graph-cli@0.97.0": - version "0.97.0" - resolved "https://registry.npmjs.org/@graphprotocol/graph-cli/-/graph-cli-0.97.0.tgz" - integrity sha512-SvijthiWbQEL3HdRDf2ydc4uAUwWJfTKyiXKXkXTtimk/hXNgzf4DuqxZPVQOOq4yx5U18iOCc/TKkTI7xCNjw== +"@graphprotocol/graph-cli@^0.97.1": + version "0.97.1" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-cli/-/graph-cli-0.97.1.tgz#a9130b813437b032aaf7857f2d75fc9f7c18f991" + integrity sha512-j5dc2Tl694jMZmVQu8SSl5Yt3VURiBPgglQEpx30aW6UJ89eLR/x46Nn7S6eflV69fmB5IHAuAACnuTzo8MD0Q== dependencies: "@float-capital/float-subgraph-uncrashable" "0.0.0-internal-testing.5" - "@oclif/core" "4.2.8" + "@oclif/core" "4.3.0" "@oclif/plugin-autocomplete" "^3.2.11" "@oclif/plugin-not-found" "^3.2.29" "@oclif/plugin-warn-if-update-available" "^3.1.24" @@ -52,57 +57,57 @@ "@whatwg-node/fetch" "^0.10.1" assemblyscript "0.19.23" chokidar "4.0.3" - debug "4.4.0" - docker-compose "1.1.1" + debug "4.4.1" + docker-compose "1.2.0" fs-extra "11.3.0" - glob "11.0.1" + glob "11.0.2" gluegun "5.2.0" - graphql "16.10.0" - immutable "5.0.3" - jayson "4.1.3" + graphql "16.11.0" + immutable "5.1.2" + jayson "4.2.0" js-yaml "4.1.0" kubo-rpc-client "^5.0.2" - open "10.1.0" + open "10.1.2" prettier "3.5.3" - semver "7.7.1" + semver "7.7.2" tmp-promise "3.0.3" - undici "7.4.0" + undici "7.9.0" web3-eth-abi "4.4.1" - yaml "2.7.0" + yaml "2.8.0" -"@graphprotocol/graph-ts@0.37.0": - version "0.37.0" - resolved "https://registry.npmjs.org/@graphprotocol/graph-ts/-/graph-ts-0.37.0.tgz" - integrity sha512-3xp/sO8zFDBkX44ydGB87ow5Cyrfr/SAm/cWzIRzUVL7ROw0KUyFBG1xj4KKlMnAod7/RL99zChYquC15H4Oqg== +"@graphprotocol/graph-ts@^0.38.1": + version "0.38.1" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-ts/-/graph-ts-0.38.1.tgz#15ce26672e9ddefd97c09e8c876810bd52390fbf" + integrity sha512-CEE2mJugPuukPugMY4bJRW8t8lOqdNa6Y3Oc0x8xc0EwidjF1LRBcfbuC5Ep5gfvWILNC/IQTT1p+QYW8cz4Hw== dependencies: assemblyscript "0.27.31" -"@inquirer/checkbox@^4.1.5": - version "4.1.5" - resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz" - integrity sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ== +"@inquirer/checkbox@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.2.0.tgz#84101e167f8ae5853c6b1f8c0aacf74c1969aef5" + integrity sha512-fdSw07FLJEU5vbpOPzXo5c6xmMGDzbZE2+niuDHX5N6mc6V0Ebso/q3xiHra4D73+PMsC8MJmcaZKuAAoaQsSA== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/figures" "^1.0.11" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/confirm@^5.1.9": - version "5.1.9" - resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.9.tgz" - integrity sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w== +"@inquirer/confirm@^5.1.14": + version "5.1.14" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.14.tgz#e6321edf51a3a5f54dc548b80ef6ba89891351ad" + integrity sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" -"@inquirer/core@^10.1.10": - version "10.1.10" - resolved "https://registry.npmjs.org/@inquirer/core/-/core-10.1.10.tgz" - integrity sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw== +"@inquirer/core@^10.1.15": + version "10.1.15" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.15.tgz#8feb69fd536786181a2b6bfb84d8674faa9d2e59" + integrity sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA== dependencies: - "@inquirer/figures" "^1.0.11" - "@inquirer/type" "^3.0.6" + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" ansi-escapes "^4.3.2" cli-width "^4.1.0" mute-stream "^2.0.0" @@ -110,131 +115,151 @@ wrap-ansi "^6.2.0" yoctocolors-cjs "^2.1.2" -"@inquirer/editor@^4.2.10": - version "4.2.10" - resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.10.tgz" - integrity sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw== +"@inquirer/editor@^4.2.16": + version "4.2.16" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.16.tgz#ac51ab9fd22411d6e670eb03d8db09b1b1381aac" + integrity sha512-iSzLjT4C6YKp2DU0fr8T7a97FnRRxMO6CushJnW5ktxLNM2iNeuyUuUA5255eOLPORoGYCrVnuDOEBdGkHGkpw== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/type" "^3.0.6" - external-editor "^3.1.0" + "@inquirer/core" "^10.1.15" + "@inquirer/external-editor" "^1.0.0" + "@inquirer/type" "^3.0.8" -"@inquirer/expand@^4.0.12": - version "4.0.12" - resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.12.tgz" - integrity sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw== +"@inquirer/expand@^4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.17.tgz#b688f4a1a65daf2bf77a11de7734766769cce343" + integrity sha512-PSqy9VmJx/VbE3CT453yOfNa+PykpKg/0SYP7odez1/NWBGuDXgPhp4AeGYYKjhLn5lUUavVS/JbeYMPdH50Mw== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" yoctocolors-cjs "^2.1.2" -"@inquirer/figures@^1.0.11": - version "1.0.11" - resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz" - integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== +"@inquirer/external-editor@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.0.tgz#a4b53af494049093ebc3c5c73fa949258e013cec" + integrity sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg== + dependencies: + chardet "^2.1.0" + iconv-lite "^0.6.3" + +"@inquirer/figures@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" + integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== -"@inquirer/input@^4.1.9": - version "4.1.9" - resolved "https://registry.npmjs.org/@inquirer/input/-/input-4.1.9.tgz" - integrity sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA== +"@inquirer/input@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.1.tgz#c174654eb1ab34dfd42a9cf6095a7e735a4db130" + integrity sha512-tVC+O1rBl0lJpoUZv4xY+WGWY8V5b0zxU1XDsMsIHYregdh7bN5X5QnIONNBAl0K765FYlAfNHS2Bhn7SSOVow== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" -"@inquirer/number@^3.0.12": - version "3.0.12" - resolved "https://registry.npmjs.org/@inquirer/number/-/number-3.0.12.tgz" - integrity sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q== +"@inquirer/number@^3.0.17": + version "3.0.17" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.17.tgz#32a66136ce35cad9f40ceb5f82a8cfac4f306517" + integrity sha512-GcvGHkyIgfZgVnnimURdOueMk0CztycfC8NZTiIY9arIAkeOgt6zG57G+7vC59Jns3UX27LMkPKnKWAOF5xEYg== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" -"@inquirer/password@^4.0.12": - version "4.0.12" - resolved "https://registry.npmjs.org/@inquirer/password/-/password-4.0.12.tgz" - integrity sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g== +"@inquirer/password@^4.0.17": + version "4.0.17" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.17.tgz#45480c8ace688ebf071e350536ea746792b3eeba" + integrity sha512-DJolTnNeZ00E1+1TW+8614F7rOJJCM4y4BAGQ3Gq6kQIG+OJ4zr3GLjIjVVJCbKsk2jmkmv6v2kQuN/vriHdZA== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" ansi-escapes "^4.3.2" -"@inquirer/prompts@^7.4.1": - version "7.4.1" - resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.1.tgz" - integrity sha512-UlmM5FVOZF0gpoe1PT/jN4vk8JmpIWBlMvTL8M+hlvPmzN89K6z03+IFmyeu/oFCenwdwHDr2gky7nIGSEVvlA== - dependencies: - "@inquirer/checkbox" "^4.1.5" - "@inquirer/confirm" "^5.1.9" - "@inquirer/editor" "^4.2.10" - "@inquirer/expand" "^4.0.12" - "@inquirer/input" "^4.1.9" - "@inquirer/number" "^3.0.12" - "@inquirer/password" "^4.0.12" - "@inquirer/rawlist" "^4.0.12" - "@inquirer/search" "^3.0.12" - "@inquirer/select" "^4.1.1" - -"@inquirer/rawlist@^4.0.12": - version "4.0.12" - resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.12.tgz" - integrity sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA== - dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/type" "^3.0.6" +"@inquirer/prompts@^7.8.1": + version "7.8.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.8.1.tgz#78270f2081d722b96ac5228e892b9d47a3dba2ca" + integrity sha512-LpBPeIpyCF1H3C7SK/QxJQG4iV1/SRmJdymfcul8PuwtVhD0JI1CSwqmd83VgRgt1QEsDojQYFSXJSgo81PVMw== + dependencies: + "@inquirer/checkbox" "^4.2.0" + "@inquirer/confirm" "^5.1.14" + "@inquirer/editor" "^4.2.16" + "@inquirer/expand" "^4.0.17" + "@inquirer/input" "^4.2.1" + "@inquirer/number" "^3.0.17" + "@inquirer/password" "^4.0.17" + "@inquirer/rawlist" "^4.1.5" + "@inquirer/search" "^3.1.0" + "@inquirer/select" "^4.3.1" + +"@inquirer/rawlist@^4.1.5": + version "4.1.5" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.5.tgz#e3664e3da3fba93f34ee25813faa7957aa717991" + integrity sha512-R5qMyGJqtDdi4Ht521iAkNqyB6p2UPuZUbMifakg1sWtu24gc2Z8CJuw8rP081OckNDMgtDCuLe42Q2Kr3BolA== + dependencies: + "@inquirer/core" "^10.1.15" + "@inquirer/type" "^3.0.8" yoctocolors-cjs "^2.1.2" -"@inquirer/search@^3.0.12": - version "3.0.12" - resolved "https://registry.npmjs.org/@inquirer/search/-/search-3.0.12.tgz" - integrity sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ== +"@inquirer/search@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.1.0.tgz#22f1373938eef7b98c3c30f604aac8fbe9baf27a" + integrity sha512-PMk1+O/WBcYJDq2H7foV0aAZSmDdkzZB9Mw2v/DmONRJopwA/128cS9M/TXWLKKdEQKZnKwBzqu2G4x/2Nqx8Q== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/figures" "^1.0.11" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" yoctocolors-cjs "^2.1.2" -"@inquirer/select@^4.1.1": - version "4.1.1" - resolved "https://registry.npmjs.org/@inquirer/select/-/select-4.1.1.tgz" - integrity sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q== +"@inquirer/select@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.3.1.tgz#b49e76dab47f7c729e4e1e520fedc268e5b88cdc" + integrity sha512-Gfl/5sqOF5vS/LIrSndFgOh7jgoe0UXEizDqahFRkq5aJBLegZ6WjuMh/hVEJwlFQjyLq1z9fRtvUMkb7jM1LA== dependencies: - "@inquirer/core" "^10.1.10" - "@inquirer/figures" "^1.0.11" - "@inquirer/type" "^3.0.6" + "@inquirer/core" "^10.1.15" + "@inquirer/figures" "^1.0.13" + "@inquirer/type" "^3.0.8" ansi-escapes "^4.3.2" yoctocolors-cjs "^2.1.2" -"@inquirer/type@^3.0.6": - version "3.0.6" - resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz" - integrity sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA== +"@inquirer/type@^3.0.8": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.8.tgz#efc293ba0ed91e90e6267f1aacc1c70d20b8b4e8" + integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== "@ipld/dag-cbor@^9.0.0": - version "9.2.2" - resolved "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.2.tgz" - integrity sha512-uIEOuruCqKTP50OBWwgz4Js2+LhiBQaxc57cnP71f45b1mHEAo1OCR1Zn/TbvSW/mV1x+JqhacIktkKyaYqhCw== + version "9.2.4" + resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-9.2.4.tgz#64aba7060836af081debe87610cd1c915997ba6a" + integrity sha512-GbDWYl2fdJgkYtIJN0HY9oO0o50d1nB4EQb7uYWKUd2ztxCjxiEW3PjwGG0nqUpN1G4Cug6LX8NzbA7fKT+zfA== dependencies: cborg "^4.0.0" multiformats "^13.1.0" "@ipld/dag-json@^10.0.0": - version "10.2.3" - resolved "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.3.tgz" - integrity sha512-itacv1j1hvYgLox2B42Msn70QLzcr0MEo5yGIENuw2SM/lQzq9bmBiMky+kDsIrsqqblKTXcHBZnnmK7D4a6ZQ== + version "10.2.5" + resolved "https://registry.yarnpkg.com/@ipld/dag-json/-/dag-json-10.2.5.tgz#a17e1c10ba58ea5bf43b6c7de8b73bb6461f6654" + integrity sha512-Q4Fr3IBDEN8gkpgNefynJ4U/ZO5Kwr7WSUMBDbZx0c37t0+IwQCTM9yJh8l5L4SRFjm31MuHwniZ/kM+P7GQ3Q== dependencies: cborg "^4.0.0" multiformats "^13.1.0" "@ipld/dag-pb@^4.0.0": - version "4.1.3" - resolved "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.3.tgz" - integrity sha512-ueULCaaSCcD+dQga6nKiRr+RSeVgdiYiEPKVUu5iQMNYDN+9osd0KpR3UDd9uQQ+6RWuv9L34SchfEwj7YIbOA== + version "4.1.5" + resolved "https://registry.yarnpkg.com/@ipld/dag-pb/-/dag-pb-4.1.5.tgz#e3bdf11995e038877a737e3684d2382e481b60df" + integrity sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA== dependencies: multiformats "^13.1.0" +"@isaacs/balanced-match@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" + integrity sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ== + +"@isaacs/brace-expansion@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz#4b3dabab7d8e75a429414a96bd67bf4c1d13e0f3" + integrity sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA== + dependencies: + "@isaacs/balanced-match" "^4.0.1" + "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -246,58 +271,60 @@ "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" - resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz#4fc56c15c580b9adb7dc3c333a134e540b44bfb1" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== -"@libp2p/crypto@^5.0.0", "@libp2p/crypto@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.0.tgz" - integrity sha512-hcmScz9m7Ae7R7b/w3x9DX+i60ZIUVsMmsHyIo0vSlGsxO0+tyM4UKUia5EpSp/i1SB/W1IFXxlURwpiX7R5eQ== +"@libp2p/crypto@^5.0.0", "@libp2p/crypto@^5.1.7": + version "5.1.7" + resolved "https://registry.yarnpkg.com/@libp2p/crypto/-/crypto-5.1.7.tgz#5a27652c1801873194e19891578242251ccbc6d8" + integrity sha512-7DO0piidLEKfCuNfS420BlHG0e2tH7W/zugdsPSiC/1Apa/s1B1dBkaIEgfDkGjrRP4S/8Or86Rtq7zXeEu67g== dependencies: - "@libp2p/interface" "^2.8.0" - "@noble/curves" "^1.7.0" - "@noble/hashes" "^1.6.1" - multiformats "^13.3.1" + "@libp2p/interface" "^2.10.5" + "@noble/curves" "^1.9.1" + "@noble/hashes" "^1.8.0" + multiformats "^13.3.6" protons-runtime "^5.5.0" uint8arraylist "^2.4.8" uint8arrays "^5.1.0" -"@libp2p/interface@^2.0.0", "@libp2p/interface@^2.8.0": - version "2.8.0" - resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-2.8.0.tgz" - integrity sha512-QnIjqqUv2aDiBho6OGcNNhLT3Ac4RKrh41qoQmqG6csMRkUUx/xZMkfFJx3j0wGCIP8GS4sGspkTt4wCpPbSWw== +"@libp2p/interface@^2.0.0", "@libp2p/interface@^2.10.5": + version "2.10.5" + resolved "https://registry.yarnpkg.com/@libp2p/interface/-/interface-2.10.5.tgz#c8f7990a19071488831ede202f37ae6c840f3b6b" + integrity sha512-Z52n04Mph/myGdwyExbFi5S/HqrmZ9JOmfLc2v4r2Cik3GRdw98vrGH19PFvvwjLwAjaqsweCtlGaBzAz09YDw== dependencies: - "@multiformats/multiaddr" "^12.3.3" + "@multiformats/dns" "^1.0.6" + "@multiformats/multiaddr" "^12.4.4" it-pushable "^3.2.3" it-stream-types "^2.0.2" - multiformats "^13.3.1" + main-event "^1.0.1" + multiformats "^13.3.6" progress-events "^1.0.1" uint8arraylist "^2.4.8" "@libp2p/logger@^5.0.0": - version "5.1.14" - resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.14.tgz" - integrity sha512-rJeEq7iuKMMjel0zzH10dXzcWn4Q2yywbv5vM9B1xTQpkD4uxTbBlQs+EL9+pmwaaQrrriEGqluZOTzHvUzJUg== + version "5.1.21" + resolved "https://registry.yarnpkg.com/@libp2p/logger/-/logger-5.1.21.tgz#40ce0b9bfbc7d17b6cece0b63547711621ec5ff8" + integrity sha512-V1TWlZM5BuKkiGQ7En4qOnseVP82JwDIpIfNjceUZz1ArL32A5HXJjLQnJchkZ3VW8PVciJzUos/vP6slhPY6Q== dependencies: - "@libp2p/interface" "^2.8.0" - "@multiformats/multiaddr" "^12.3.3" + "@libp2p/interface" "^2.10.5" + "@multiformats/multiaddr" "^12.4.4" interface-datastore "^8.3.1" - multiformats "^13.3.1" + multiformats "^13.3.6" weald "^1.0.4" "@libp2p/peer-id@^5.0.0": - version "5.1.1" - resolved "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.1.tgz" - integrity sha512-dVpgln2gWybglCC8hiQqyGlyXU7F7ovoOqwnnMs8HxurGEH9QxgmCfxRP4p8s86bQwl1MFbyj0AqYPy/zbKLrA== + version "5.1.8" + resolved "https://registry.yarnpkg.com/@libp2p/peer-id/-/peer-id-5.1.8.tgz#646fdda7d3346ce072adee6727c792ddcf1631ea" + integrity sha512-pGaM4BwjnXdGtAtd84L4/wuABpsnFYE+AQ+h3GxNFme0IsTaTVKWd1jBBE5YFeKHBHGUOhF3TlHsdjFfjQA7TA== dependencies: - "@libp2p/crypto" "^5.1.0" - "@libp2p/interface" "^2.8.0" - multiformats "^13.3.1" + "@libp2p/crypto" "^5.1.7" + "@libp2p/interface" "^2.10.5" + multiformats "^13.3.6" uint8arrays "^5.1.0" -"@multiformats/dns@^1.0.3": +"@multiformats/dns@^1.0.3", "@multiformats/dns@^1.0.6": version "1.0.6" - resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/@multiformats/dns/-/dns-1.0.6.tgz#b8c7de11459a02a5f4e609d35d3cdb95cb6ad152" integrity sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw== dependencies: "@types/dns-packet" "^5.6.5" @@ -309,78 +336,74 @@ uint8arrays "^5.0.2" "@multiformats/multiaddr-to-uri@^11.0.0": - version "11.0.0" - resolved "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.0.tgz" - integrity sha512-9RNmlIGwZbBLsHekT50dbt4o4u8Iciw9kGjv+WHiGxQdsJ6xKKjU1+C0Vbas6RilMbaVOAOnEyfNcXbUmTkLxQ== + version "11.0.2" + resolved "https://registry.yarnpkg.com/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.2.tgz#60efd8209b0d94d6ad73467fc7b7707954d0f64a" + integrity sha512-SiLFD54zeOJ0qMgo9xv1Tl9O5YktDKAVDP4q4hL16mSq4O4sfFNagNADz8eAofxd6TfQUzGQ3TkRRG9IY2uHRg== dependencies: "@multiformats/multiaddr" "^12.3.0" -"@multiformats/multiaddr@^12.2.1", "@multiformats/multiaddr@^12.3.0", "@multiformats/multiaddr@^12.3.3": - version "12.4.0" - resolved "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.4.0.tgz" - integrity sha512-FL7yBTLijJ5JkO044BGb2msf+uJLrwpD6jD6TkXlbjA9N12+18HT40jvd4o5vL4LOJMc86dPX6tGtk/uI9kYKg== +"@multiformats/multiaddr@^12.2.1", "@multiformats/multiaddr@^12.3.0", "@multiformats/multiaddr@^12.4.4": + version "12.5.1" + resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz#45d64456eddbf8cbe179366d7cb7b72efabe049f" + integrity sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ== dependencies: "@chainsafe/is-ip" "^2.0.1" "@chainsafe/netmask" "^2.0.0" "@multiformats/dns" "^1.0.3" + abort-error "^1.0.1" multiformats "^13.0.0" uint8-varint "^2.0.1" uint8arrays "^5.0.0" -"@noble/curves@^1.7.0": - version "1.8.1" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz" - integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== - dependencies: - "@noble/hashes" "1.7.1" - -"@noble/curves@~1.4.0", "@noble/curves@1.4.2": +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": version "1.4.2" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== dependencies: "@noble/hashes" "1.4.0" -"@noble/hashes@^1.6.1": - version "1.7.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz" - integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== +"@noble/curves@^1.9.1": + version "1.9.6" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.6.tgz#b45ebedca85bb75782f6be7e7f120f0c423c99e0" + integrity sha512-GIKz/j99FRthB8icyJQA51E8Uk5hXmdyThjgQXRKiv9h0zeRlzSCLIzFw6K1LotZ3XuB7yzlf76qk7uBmTdFqA== + dependencies: + "@noble/hashes" "1.8.0" -"@noble/hashes@~1.4.0", "@noble/hashes@1.4.0": +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": version "1.4.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== -"@noble/hashes@1.7.1": - version "1.7.1" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz" - integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== +"@noble/hashes@1.8.0", "@noble/hashes@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + 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.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + 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.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + 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" -"@oclif/core@^4": - version "4.2.10" - resolved "https://registry.npmjs.org/@oclif/core/-/core-4.2.10.tgz" - integrity sha512-fAqcXgqkUm4v5FYy7qWP4w1HaOlVSVJveah+yVTo5Nm5kTiXhmD5mQQ7+knGeBaStyrtQy6WardoC2xSic9rlQ== +"@oclif/core@4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.3.0.tgz#9a2951f05f81a4c7ae5ffcc00b2d720cca0898e6" + integrity sha512-lIzHY+JMP6evrS5E/sGijNnwrCoNtGy8703jWXcMuPOYKiFhWoAqnIm1BGgoRgmxczkbSfRsHUL/lwsSgh74Lw== dependencies: ansi-escapes "^4.3.2" ansis "^3.17.0" @@ -401,19 +424,18 @@ wordwrap "^1.0.0" wrap-ansi "^7.0.0" -"@oclif/core@4.2.8": - version "4.2.8" - resolved "https://registry.npmjs.org/@oclif/core/-/core-4.2.8.tgz" - integrity sha512-OWv4Va6bERxIhrYcnUGzyhGRqktc64lJO6cZ3UwkzJDpfR8ZrbCxRfKRBBah1i8kzUlOAeAXnpbMBMah3skKwA== +"@oclif/core@^4", "@oclif/core@^4.5.2": + version "4.5.2" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.5.2.tgz#4db8a365fa7e9e33af272294f710a7f3f25538e2" + integrity sha512-eQcKyrEcDYeZJKu4vUWiu0ii/1Gfev6GF4FsLSgNez5/+aQyAUCjg3ZWlurf491WiYZTXCWyKAxyPWk8DKv2MA== dependencies: ansi-escapes "^4.3.2" - ansis "^3.16.0" + ansis "^3.17.0" clean-stack "^3.0.1" cli-spinners "^2.9.2" debug "^4.4.0" ejs "^3.1.10" get-package-type "^0.1.0" - globby "^11.1.0" indent-string "^4.0.0" is-wsl "^2.2.0" lilconfig "^3.1.3" @@ -421,62 +443,63 @@ semver "^7.6.3" string-width "^4.2.3" supports-color "^8" + tinyglobby "^0.2.14" widest-line "^3.1.0" wordwrap "^1.0.0" wrap-ansi "^7.0.0" "@oclif/plugin-autocomplete@^3.2.11": - version "3.2.27" - resolved "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.27.tgz" - integrity sha512-Aywx0Vw36k0fQVBa2uLb8FKblGAP7ly1cQ5bdKqL4BmhJnUasy37tpyIDMUor93asOS+kKFQg+52pOxQgXHi1A== + version "3.2.34" + resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.34.tgz#1669fb16bfa887a465bf30181bb69cf14437fbd4" + integrity sha512-KhbPcNjitAU7jUojMXJ3l7duWVub0L0pEr3r3bLrpJBNuIJhoIJ7p56Ropcb7OMH2xcaz5B8HGq56cTOe1FHEg== dependencies: "@oclif/core" "^4" ansis "^3.16.0" - debug "^4.4.0" + debug "^4.4.1" ejs "^3.1.10" "@oclif/plugin-not-found@^3.2.29": - version "3.2.49" - resolved "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.49.tgz" - integrity sha512-3V74/O5aFAqTTCJ7+X04M6vmt59Dk8HimB2uOlGgJrR7yLMW9JsVWKpDZZ6fl1hfd5kK9Jn4oaEt/1LuwfW1wQ== + version "3.2.64" + resolved "https://registry.yarnpkg.com/@oclif/plugin-not-found/-/plugin-not-found-3.2.64.tgz#03af9241f2701e53ea182a0262ef47e70125b3ab" + integrity sha512-WDCPkFw5Qi9ALVODnGWdFDcm49iBOg7G2/u1C/o/KB4eSxlQn0JEDhLaMGcLmwOYKQnQdI9x35K77vhR1JrwDg== dependencies: - "@inquirer/prompts" "^7.4.1" - "@oclif/core" "^4" + "@inquirer/prompts" "^7.8.1" + "@oclif/core" "^4.5.2" ansis "^3.17.0" fast-levenshtein "^3.0.0" "@oclif/plugin-warn-if-update-available@^3.1.24": - version "3.1.38" - resolved "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.38.tgz" - integrity sha512-lwYtVXdQaBJV94DglPu140Bc6NmmysHhX5PZtdxeNcUG2BgSX/Sre7oCzMEgmuhe4Lu2jDviMxTX81a8wv6v1w== + version "3.1.46" + resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.46.tgz#21593b68f3876021c26841993c17ac82aa18e179" + integrity sha512-YDlr//SHmC80eZrt+0wNFWSo1cOSU60RoWdhSkAoPB3pUGPSNHZDquXDpo7KniinzYPsj1rfetCYk7UVXwYu7A== dependencies: "@oclif/core" "^4" ansis "^3.17.0" - debug "^4.4.0" + debug "^4.4.1" http-call "^5.2.2" lodash "^4.17.21" registry-auth-token "^5.1.0" "@pinax/graph-networks-registry@^0.6.5": version "0.6.7" - resolved "https://registry.npmjs.org/@pinax/graph-networks-registry/-/graph-networks-registry-0.6.7.tgz" + resolved "https://registry.yarnpkg.com/@pinax/graph-networks-registry/-/graph-networks-registry-0.6.7.tgz#ceb994f3b31e2943b9c9d9b09dd86eb00d067c0e" integrity sha512-xogeCEZ50XRMxpBwE3TZjJ8RCO8Guv39gDRrrKtlpDEDEMLm0MzD3A0SQObgj7aF7qTZNRTWzsuvQdxgzw25wQ== "@pnpm/config.env-replace@^1.1.0": version "1.1.0" - resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== "@pnpm/network.ca-file@^1.0.1": version "1.0.2" - resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== dependencies: graceful-fs "4.2.10" "@pnpm/npm-conf@^2.1.0": version "2.3.1" - resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== dependencies: "@pnpm/config.env-replace" "^1.1.0" @@ -485,17 +508,17 @@ "@rescript/std@9.0.0": version "9.0.0" - resolved "https://registry.npmjs.org/@rescript/std/-/std-9.0.0.tgz" + resolved "https://registry.yarnpkg.com/@rescript/std/-/std-9.0.0.tgz#df53f3fa5911cb4e85bd66b92e9e58ddf3e4a7e1" integrity sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ== "@scure/base@~1.1.6": version "1.1.9" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== "@scure/bip32@1.4.0": version "1.4.0" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== dependencies: "@noble/curves" "~1.4.0" @@ -504,7 +527,7 @@ "@scure/bip39@1.3.0": version "1.3.0" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== dependencies: "@noble/hashes" "~1.4.0" @@ -512,161 +535,166 @@ "@types/connect@^3.4.33": version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/dns-packet@^5.6.5": version "5.6.5" - resolved "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz" + resolved "https://registry.yarnpkg.com/@types/dns-packet/-/dns-packet-5.6.5.tgz#49fc29a40f5d30227ed028fa1ee82601d3745e15" integrity sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q== dependencies: "@types/node" "*" -"@types/node@*", "@types/node@>=18": - version "22.14.1" - resolved "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz" - integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== +"@types/node@*": + version "24.2.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.1.tgz#83e41543f0a518e006594bb394e2cd961de56727" + integrity sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ== dependencies: - undici-types "~6.21.0" + undici-types "~7.10.0" "@types/node@^12.12.54": version "12.20.55" - resolved "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== "@types/parse-json@^4.0.0": version "4.0.2" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/ws@^7.4.4": version "7.4.7" - resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== dependencies: "@types/node" "*" "@whatwg-node/disposablestack@^0.0.6": version "0.0.6" - resolved "https://registry.npmjs.org/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz" + resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" integrity sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw== dependencies: "@whatwg-node/promise-helpers" "^1.0.0" tslib "^2.6.3" "@whatwg-node/fetch@^0.10.1": - version "0.10.5" - resolved "https://registry.npmjs.org/@whatwg-node/fetch/-/fetch-0.10.5.tgz" - integrity sha512-+yFJU3hmXPAHJULwx0VzCIsvr/H0lvbPvbOH3areOH3NAuCxCwaJsQ8w6/MwwMcvEWIynSsmAxoyaH04KeosPg== + version "0.10.10" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.10.tgz#2b3397bc114b3f6dbda34bd1f205e45216abd10f" + integrity sha512-watz4i/Vv4HpoJ+GranJ7HH75Pf+OkPQ63NoVmru6Srgc8VezTArB00i/oQlnn0KWh14gM42F22Qcc9SU9mo/w== dependencies: - "@whatwg-node/node-fetch" "^0.7.11" + "@whatwg-node/node-fetch" "^0.7.25" urlpattern-polyfill "^10.0.0" -"@whatwg-node/node-fetch@^0.7.11": - version "0.7.17" - resolved "https://registry.npmjs.org/@whatwg-node/node-fetch/-/node-fetch-0.7.17.tgz" - integrity sha512-Ni8A2H/r6brNf4u8Y7ATxmWUD0xltsQ6a4NnjWSbw4PgaT34CbY+u4QtVsFj9pTC3dBKJADKjac3AieAig+PZA== +"@whatwg-node/node-fetch@^0.7.25": + version "0.7.25" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.7.25.tgz#8da0af32f389eeeebf935af5fbcce7bbd2bbc774" + integrity sha512-szCTESNJV+Xd56zU6ShOi/JWROxE9IwCic8o5D9z5QECZloas6Ez5tUuKqXTAdu6fHFx1t6C+5gwj8smzOLjtg== dependencies: + "@fastify/busboy" "^3.1.1" "@whatwg-node/disposablestack" "^0.0.6" - "@whatwg-node/promise-helpers" "^1.2.5" - busboy "^1.6.0" + "@whatwg-node/promise-helpers" "^1.3.2" tslib "^2.6.3" -"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.5": - version "1.3.0" - resolved "https://registry.npmjs.org/@whatwg-node/promise-helpers/-/promise-helpers-1.3.0.tgz" - integrity sha512-486CouizxHXucj8Ky153DDragfkMcHtVEToF5Pn/fInhUUSiCmt9Q4JVBa6UK5q4RammFBtGQ4C9qhGlXU9YbA== +"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz#3b54987ad6517ef6db5920c66a6f0dada606587d" + integrity sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA== dependencies: tslib "^2.6.3" abitype@0.7.1: version "0.7.1" - resolved "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.7.1.tgz#16db20abe67de80f6183cf75f3de1ff86453b745" integrity sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ== +abort-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/abort-error/-/abort-error-1.0.1.tgz#526c17caf2ac9eb1fab1ffdff18c5076157a324e" + integrity sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg== + ansi-colors@^4.1.1: version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + 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.2: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + 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@^4.1.0: version "4.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz" + 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.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + 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: +ansi-styles@^4.0.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + 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@^6.1.0: version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== ansis@^3.16.0, ansis@^3.17.0: version "3.17.0" - resolved "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz" + resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== any-signal@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-4.1.1.tgz#928416c355c66899e6b2a91cad4488f0324bae03" integrity sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA== apisauce@^2.1.5: version "2.1.6" - resolved "https://registry.npmjs.org/apisauce/-/apisauce-2.1.6.tgz" + resolved "https://registry.yarnpkg.com/apisauce/-/apisauce-2.1.6.tgz#94887f335bf3d735305fc895c8a191c9c2608a7f" integrity sha512-MdxR391op/FucS2YQRfB/NMRyCnHEPDd4h17LRIuVYi0BpGmMhpxc0shbOpfs5ahABuBEffNCGal5EcsydbBWg== dependencies: axios "^0.21.4" app-module-path@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== assemblyscript@0.19.23: version "0.19.23" - resolved "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.19.23.tgz" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.19.23.tgz#16ece69f7f302161e2e736a0f6a474e6db72134c" integrity sha512-fwOQNZVTMga5KRsfY80g7cpOl4PsFQczMwHzdtgoqLXaYhkhavufKb0sB0l3T1DUxpAufA0KNhlbpuuhZUwxMA== dependencies: binaryen "102.0.0-nightly.20211028" @@ -675,93 +703,93 @@ assemblyscript@0.19.23: assemblyscript@0.27.31: version "0.27.31" - resolved "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.31.tgz" + resolved "https://registry.yarnpkg.com/assemblyscript/-/assemblyscript-0.27.31.tgz#07412b1bc42c67f78080dbaddca030ab74d3b9b2" integrity sha512-Ra8kiGhgJQGZcBxjtMcyVRxOEJZX64kd+XGpjWzjcjgxWJVv+CAQO0aDBk4GQVhjYbOkATarC83mHjAVGtwPBQ== dependencies: binaryen "116.0.0-nightly.20240114" long "^5.2.1" -async@^3.2.3: +async@^3.2.6: version "3.2.6" - resolved "https://registry.npmjs.org/async/-/async-3.2.6.tgz" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== available-typed-arrays@^1.0.7: version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== dependencies: possible-typed-array-names "^1.0.0" axios@^0.21.4: version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + 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.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== binaryen@102.0.0-nightly.20211028: version "102.0.0-nightly.20211028" - resolved "https://registry.npmjs.org/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== binaryen@116.0.0-nightly.20240114: version "116.0.0-nightly.20240114" - resolved "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz" + resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-116.0.0-nightly.20240114.tgz#ad8bfbde77d4cb4715b93997114eefc30f45155b" integrity sha512-0GZrojJnuhoe+hiwji7QFaL3tBlJoA+KFUN7ouYSDGZLSo9CKM8swQX8n/UcbR0d1VuZKU+nhogNzv423JEu5A== blob-to-it@^2.0.5: - version "2.0.8" - resolved "https://registry.npmjs.org/blob-to-it/-/blob-to-it-2.0.8.tgz" - integrity sha512-1MKnG2ul1DtSgrxFHqhdJgIJODJbNj7alOLSJRD7O9S2iCJ72ZWU6j8+CVpjIdLueqwpWhy4ouvpanYlFLqkRw== + version "2.0.10" + resolved "https://registry.yarnpkg.com/blob-to-it/-/blob-to-it-2.0.10.tgz#dc3bb27f246b3437a23bcffe343fc0257f3de85f" + integrity sha512-I39vO57y+LBEIcAV7fif0sn96fYOYVqrPiOD+53MxQGv4DBgt1/HHZh0BHheWx2hVe24q5LTSXxqeV1Y3Nzkgg== dependencies: browser-readablestream-to-it "^2.0.0" brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" braces@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: fill-range "^7.1.1" browser-readablestream-to-it@^2.0.0, browser-readablestream-to-it@^2.0.5: - version "2.0.8" - resolved "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.8.tgz" - integrity sha512-+aDq+8QoTxIklc9m21oVg96Bm18EpeVke4/8vWPNu+9Ktd+G4PYavitE4gv/pjIndw1q+vxE/Rcnv1zYHrEQbQ== + version "2.0.10" + resolved "https://registry.yarnpkg.com/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.10.tgz#e37098be227623af21ee815af74d43ffb9307a6d" + integrity sha512-I/9hEcRtjct8CzD9sVo9Mm4ntn0D+7tOVrjbPl69XAoOfgJ8NBdOQU+WX+5SHhcELJDb14mWt7zuvyqha+MEAQ== buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" @@ -769,21 +797,14 @@ buffer@^6.0.3: bundle-name@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== dependencies: run-applescript "^7.0.0" -busboy@^1.6.0: - 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" - call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -791,7 +812,7 @@ call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply- call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -801,7 +822,7 @@ call-bind@^1.0.8: call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -809,65 +830,57 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== cborg@^4.0.0: - version "4.2.9" - resolved "https://registry.npmjs.org/cborg/-/cborg-4.2.9.tgz" - integrity sha512-HG8GprGhfzkbzDAIQApqYcN1BJAyf8vDQbzclAwaqrm3ATFnB7ygiWLr+YID+GBdfTJ+yHtzPi06218xULpZrg== + version "4.2.12" + resolved "https://registry.yarnpkg.com/cborg/-/cborg-4.2.12.tgz#2f9826773f559e436cb85a49c88fc1bb08bdc373" + integrity sha512-z126yLoavS75cdTuiKu61RC3Y3trqtDAgQRa5Q0dpHn1RmqhIedptWXKnk0lQ5yo/GmcV9myvIkzFgZ8GnqSog== chalk@^2.4.2: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + 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.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chardet@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.0.tgz#1007f441a1ae9f9199a4a67f6e978fb0aa9aa3fe" + integrity sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA== chokidar@4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: readdirp "^4.0.1" clean-stack@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-3.0.1.tgz#155bf0b2221bf5f4fba89528d24c5953f17fe3a8" integrity sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg== dependencies: escape-string-regexp "4.0.0" cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.2.0, cli-spinners@^2.9.2: version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-table3@0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== dependencies: object-assign "^4.1.0" @@ -877,56 +890,56 @@ cli-table3@0.6.0: cli-width@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== clone@^1.0.2: version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + 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.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + 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.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -colors@^1.1.2, colors@1.4.0: +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.npmjs.org/colors/-/colors-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== commander@^2.20.3: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== config-chain@^1.1.11: version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" @@ -934,12 +947,12 @@ config-chain@^1.1.11: content-type@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== cosmiconfig@7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" @@ -948,19 +961,19 @@ cosmiconfig@7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cross-spawn@^7.0.3, cross-spawn@^7.0.6: - version "7.0.6" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" - integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== +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" -cross-spawn@7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -968,27 +981,27 @@ cross-spawn@7.0.3: dag-jose@^5.0.0: version "5.1.1" - resolved "https://registry.npmjs.org/dag-jose/-/dag-jose-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/dag-jose/-/dag-jose-5.1.1.tgz#02708321f14b6f43990e238010c73464916259a7" integrity sha512-9alfZ8Wh1XOOMel8bMpDqWsDT72ojFQCJPtwZSev9qh4f8GoCV9qrJW8jcOUhcstO8Kfm09FHGo//jqiZq3z9w== dependencies: "@ipld/dag-cbor" "^9.0.0" multiformats "~13.1.3" -debug@^4.1.1, debug@^4.4.0, debug@4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== +debug@4.4.1, debug@^4.1.1, debug@^4.4.0, debug@^4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" default-browser-id@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== default-browser@^5.2.1: version "5.2.1" - resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== dependencies: bundle-name "^4.1.0" @@ -996,14 +1009,14 @@ default-browser@^5.2.1: defaults@^1.0.3: version "1.0.4" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -1012,38 +1025,38 @@ define-data-property@^1.1.4: define-lazy-prop@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== delay@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" dns-packet@^5.6.1: version "5.6.1" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.1.tgz#ae888ad425a9d1478a0674256ab866de1012cf2f" integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" -docker-compose@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/docker-compose/-/docker-compose-1.1.1.tgz" - integrity sha512-UkIUz0LtzuO17Ijm6SXMGtfZMs7IvbNwvuJBiBuN93PIhr/n9/sbJMqpvYFaCBGfwu1ZM4PPPDgQzeeke4lEoA== +docker-compose@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-1.2.0.tgz#e4c30afdd1a111b47e87d97754baa304302586fc" + integrity sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w== dependencies: yaml "^2.2.2" dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" @@ -1052,108 +1065,108 @@ dunder-proto@^1.0.1: eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ejs@^3.1.10: - version "3.1.10" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz" - integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== - dependencies: - jake "^10.8.5" - ejs@3.1.8: version "3.1.8" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== dependencies: jake "^10.8.5" +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + electron-fetch@^1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/electron-fetch/-/electron-fetch-1.9.1.tgz#e28bfe78d467de3f2dec884b1d72b8b05322f30f" integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== dependencies: encoding "^0.1.13" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encoding@^0.1.13: version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== dependencies: iconv-lite "^0.6.2" enquirer@2.3.6: version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + 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" err-code@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + 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-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" es6-promise@^4.0.3: version "4.2.8" - resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== dependencies: es6-promise "^4.0.3" -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +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== + ethereum-cryptography@^2.0.0: version "2.2.1" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== dependencies: "@noble/curves" "1.4.2" @@ -1163,12 +1176,12 @@ ethereum-cryptography@^2.0.0: eventemitter3@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== execa@5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -1181,28 +1194,19 @@ execa@5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -external-editor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - eyes@^0.1.8: version "0.1.8" - resolved "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== fast-fifo@^1.0.0: version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== fast-glob@^3.2.9, fast-glob@^3.3.3: version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -1213,52 +1217,57 @@ fast-glob@^3.2.9, fast-glob@^3.3.3: fast-levenshtein@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== dependencies: fastest-levenshtein "^1.0.7" fastest-levenshtein@^1.0.7: version "1.0.16" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: version "1.19.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" +fdir@^6.4.4: + version "6.4.6" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== + filelist@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" fill-range@^7.1.1: version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" follow-redirects@^1.14.0: - version "1.15.9" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== for-each@^0.3.5: version "0.3.5" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" foreground-child@^3.1.0: version "3.3.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: cross-spawn "^7.0.6" @@ -1266,7 +1275,7 @@ foreground-child@^3.1.0: fs-extra@11.3.0: version "11.3.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" @@ -1275,7 +1284,7 @@ fs-extra@11.3.0: fs-jetpack@4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/fs-jetpack/-/fs-jetpack-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/fs-jetpack/-/fs-jetpack-4.3.1.tgz#cdfd4b64e6bfdec7c7dc55c76b39efaa7853bb20" integrity sha512-dbeOK84F6BiQzk2yqqCVwCPWTxAvVGJ3fMQc6E2wuEohS28mR6yHngbrKuVCK1KHRx/ccByDylqu4H5PCP2urQ== dependencies: minimatch "^3.0.2" @@ -1283,17 +1292,17 @@ fs-jetpack@4.3.1: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -1309,17 +1318,17 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.3.0: get-iterator@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/get-iterator/-/get-iterator-1.0.2.tgz#cd747c02b4c084461fac14f48f6b45a80ed25c82" integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -1327,19 +1336,31 @@ get-proto@^1.0.0, get-proto@^1.0.1: get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + 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@11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.2.tgz#3261e3897bbc603030b041fd77ba636022d51ce0" + integrity sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ== + dependencies: + foreground-child "^3.1.0" + jackspeak "^4.0.1" + minimatch "^10.0.0" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^2.0.0" + glob@^7.1.3: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -1349,21 +1370,9 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@11.0.1: - version "11.0.1" - resolved "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz" - integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== - dependencies: - foreground-child "^3.1.0" - jackspeak "^4.0.1" - minimatch "^10.0.0" - minipass "^7.1.2" - package-json-from-dist "^1.0.0" - path-scurry "^2.0.0" - globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -1375,7 +1384,7 @@ globby@^11.1.0: gluegun@5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/gluegun/-/gluegun-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/gluegun/-/gluegun-5.2.0.tgz#88ba1f76f20e68a135557a4a4c8ea283291a7491" integrity sha512-jSUM5xUy2ztYFQANne17OUm/oAd7qSX7EBksS9bQDt9UvLPqcEkeWUebmaposb8Tx7eTTD8uJVWGRe6PYSsYkg== dependencies: apisauce "^2.1.5" @@ -1411,73 +1420,73 @@ gluegun@5.2.0: gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - graceful-fs@4.2.10: version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + 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== + graphql-import-node@^0.0.5: version "0.0.5" - resolved "https://registry.npmjs.org/graphql-import-node/-/graphql-import-node-0.0.5.tgz" + resolved "https://registry.yarnpkg.com/graphql-import-node/-/graphql-import-node-0.0.5.tgz#caf76a6cece10858b14f27cce935655398fc1bf0" integrity sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q== -graphql@*, graphql@^16.6.0, graphql@16.10.0: - version "16.10.0" - resolved "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz" - integrity sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ== +graphql@16.11.0, graphql@^16.6.0: + version "16.11.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633" + integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + 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.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" hashlru@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/hashlru/-/hashlru-2.3.0.tgz#5dc15928b3f6961a2056416bb3a4910216fdfb51" integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== hasown@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" http-call@^5.2.2: version "5.3.0" - resolved "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== dependencies: content-type "^1.0.4" @@ -1489,41 +1498,34 @@ http-call@^5.2.2: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: +iconv-lite@^0.6.2, iconv-lite@^0.6.3: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -immutable@5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz" - integrity sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw== +immutable@5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.2.tgz#e8169476414505e5a4fa650107b65e1227d16d4b" + integrity sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ== import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -1531,51 +1533,51 @@ import-fresh@^3.2.1: indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + 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.npmjs.org/inflight/-/inflight-1.0.6.tgz" + 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.0.3, inherits@2: +inherits@2, inherits@^2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@^1.3.4: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== interface-datastore@^8.3.1: - version "8.3.1" - resolved "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.1.tgz" - integrity sha512-3r0ETmHIi6HmvM5sc09QQiCD3gUfwtEM/AAChOyAd/UAKT69uk8LXfTSUBufbUIO/dU65Vj8nb9O6QjwW8vDSQ== + version "8.3.2" + resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.3.2.tgz#1ae2f78d1cbc7a99421d551fd0cec00b8859399d" + integrity sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA== dependencies: interface-store "^6.0.0" uint8arrays "^5.1.0" interface-store@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/interface-store/-/interface-store-6.0.2.tgz" - integrity sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA== + version "6.0.3" + resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-6.0.3.tgz#a4443490976f52e1b40ff99ddfbc690dfbb00863" + integrity sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA== ipfs-unixfs@^11.1.4: - version "11.2.1" - resolved "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.2.1.tgz" - integrity sha512-gUeeX63EFgiaMgcs0cUs2ZUPvlOeEZ38okjK8twdWGZX2jYd2rCk8k/TJ3DSRIDZ2t/aZMv6I23guxHaofZE3w== + version "11.2.5" + resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-11.2.5.tgz#6b684bb2058689b1fe562715e8f69bbe94cfb86a" + integrity sha512-uasYJ0GLPbViaTFsOLnL9YPjX5VmhnqtWRriogAHOe4ApmIi9VAOFBzgDHsUW2ub4pEa/EysbtWk126g2vkU/g== dependencies: protons-runtime "^5.5.0" uint8arraylist "^2.4.8" is-arguments@^1.0.4: version "1.2.0" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: call-bound "^1.0.2" @@ -1583,42 +1585,42 @@ is-arguments@^1.0.4: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-docker@^2.0.0: version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-docker@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-electron@^2.2.0: version "2.2.2" - resolved "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + 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-generator-function@^1.0.7: version "1.1.0" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== dependencies: call-bound "^1.0.3" @@ -1628,36 +1630,36 @@ is-generator-function@^1.0.7: is-glob@^4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + 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-inside-container@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== dependencies: is-docker "^3.0.0" is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-plain-obj@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" + 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.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: call-bound "^1.0.2" @@ -1667,99 +1669,99 @@ is-regex@^1.2.1: is-retry-allowed@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-typed-array@^1.1.3: version "1.1.15" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" is-wsl@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== dependencies: is-inside-container "^1.0.0" isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iso-url@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== isomorphic-ws@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== it-all@^3.0.4: - version "3.0.7" - resolved "https://registry.npmjs.org/it-all/-/it-all-3.0.7.tgz" - integrity sha512-PkuYtu6XhJzuPTKXImd6y0qE6H91MUPV/b9xotXMAI6GjmD2v3NoHj2g5L0lS2qZ0EzyGWZU1kp0UxW8POvNBQ== + version "3.0.9" + resolved "https://registry.yarnpkg.com/it-all/-/it-all-3.0.9.tgz#9b9b54ddb42786260c3d9e25feeaa02e667be1cc" + integrity sha512-fz1oJJ36ciGnu2LntAlE6SA97bFZpW7Rnt0uEc1yazzR2nKokZLr8lIRtgnpex4NsmaBcvHF+Z9krljWFy/mmg== it-first@^3.0.4: - version "3.0.7" - resolved "https://registry.npmjs.org/it-first/-/it-first-3.0.7.tgz" - integrity sha512-e2dVSlOP+pAxPYPVJBF4fX7au8cvGfvLhIrGCMc5aWDnCvwgOo94xHbi3Da6eXQ2jPL5FGEM8sJMn5uE8Seu+g== + version "3.0.9" + resolved "https://registry.yarnpkg.com/it-first/-/it-first-3.0.9.tgz#cee48427aaa36ec34df6644042c7f22349832070" + integrity sha512-ZWYun273Gbl7CwiF6kK5xBtIKR56H1NoRaiJek2QzDirgen24u8XZ0Nk+jdnJSuCTPxC2ul1TuXKxu/7eK6NuA== it-glob@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/it-glob/-/it-glob-3.0.2.tgz" - integrity sha512-yw6am0buc9W6HThDhlf/0k9LpwK31p9Y3c0hpaoth9Iaha4Kog2oRlVanLGSrPPoh9yGwHJbs+KfBJt020N6/g== + version "3.0.4" + resolved "https://registry.yarnpkg.com/it-glob/-/it-glob-3.0.4.tgz#6d008a45d54573541bcd8ead0b2dac7cef907ddd" + integrity sha512-73PbGBTK/dHp5PX4l8pkQH1ozCONP0U+PB3qMqltxPonRJQNomINE3Hn9p02m2GOu95VoeVvSZdHI2N+qub0pw== dependencies: fast-glob "^3.3.3" it-last@^3.0.4: - version "3.0.7" - resolved "https://registry.npmjs.org/it-last/-/it-last-3.0.7.tgz" - integrity sha512-qG4BTveE6Wzsz5voqaOtZAfZgXTJT+yiaj45vp5S0Vi8oOdgKlRqUeolfvWoMCJ9vwSc/z9pAaNYIza7gA851w== + version "3.0.9" + resolved "https://registry.yarnpkg.com/it-last/-/it-last-3.0.9.tgz#c9e54b7bc16c2c19da10b4658ec465f38d463683" + integrity sha512-AtfUEnGDBHBEwa1LjrpGHsJMzJAWDipD6zilvhakzJcm+BCvNX8zlX2BsHClHJLLTrsY4lY9JUjc+TQV4W7m1w== it-map@^3.0.5: - version "3.1.2" - resolved "https://registry.npmjs.org/it-map/-/it-map-3.1.2.tgz" - integrity sha512-G3dzFUjTYHKumJJ8wa9dSDS3yKm8L7qDUnAgzemOD0UMztwm54Qc2v97SuUCiAgbOz/aibkSLImfoFK09RlSFQ== + version "3.1.4" + resolved "https://registry.yarnpkg.com/it-map/-/it-map-3.1.4.tgz#e27641c3eb2f195e1bf62f63b6d932fceee851e5" + integrity sha512-QB9PYQdE9fUfpVFYfSxBIyvKynUCgblb143c+ktTK6ZuKSKkp7iH58uYFzagqcJ5HcqIfn1xbfaralHWam+3fg== dependencies: it-peekable "^3.0.0" it-peekable@^3.0.0, it-peekable@^3.0.3: - version "3.0.6" - resolved "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.6.tgz" - integrity sha512-odk9wn8AwFQipy8+tFaZNRCM62riraKZJRysfbmOett9wgJumCwgZFzWUBUwMoiQapEcEVGwjDpMChZIi+zLuQ== + version "3.0.8" + resolved "https://registry.yarnpkg.com/it-peekable/-/it-peekable-3.0.8.tgz#4196c0ae93fd44384d458c73dbbcbfeba1363d5c" + integrity sha512-7IDBQKSp/dtBxXV3Fj0v3qM1jftJ9y9XrWLRIuU1X6RdKqWiN60syNwP0fiDxZD97b8SYM58dD3uklIk1TTQAw== it-pushable@^3.2.3: version "3.2.3" - resolved "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz" + resolved "https://registry.yarnpkg.com/it-pushable/-/it-pushable-3.2.3.tgz#e2b80aed90cfbcd54b620c0a0785e546d4e5f334" integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== dependencies: p-defer "^4.0.0" it-stream-types@^2.0.1, it-stream-types@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/it-stream-types/-/it-stream-types-2.0.2.tgz#60bbace90096796b4e6cc3bfab99cf9f2b86c152" integrity sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww== it-to-stream@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/it-to-stream/-/it-to-stream-1.0.0.tgz#6c47f91d5b5df28bda9334c52782ef8e97fe3a4a" integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== dependencies: buffer "^6.0.3" @@ -1770,26 +1772,25 @@ it-to-stream@^1.0.0: readable-stream "^3.6.0" jackspeak@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz" - integrity sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw== + version "4.1.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.1.tgz#96876030f450502047fc7e8c7fcf8ce8124e43ae" + integrity sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ== dependencies: "@isaacs/cliui" "^8.0.2" jake@^10.8.5: - version "10.9.2" - resolved "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz" - integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + version "10.9.4" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.4.tgz#d626da108c63d5cfb00ab5c25fadc7e0084af8e6" + integrity sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA== dependencies: - async "^3.2.3" - chalk "^4.0.2" + async "^3.2.6" filelist "^1.0.4" - minimatch "^3.1.2" + picocolors "^1.1.1" -jayson@4.1.3: - version "4.1.3" - resolved "https://registry.npmjs.org/jayson/-/jayson-4.1.3.tgz" - integrity sha512-LtXh5aYZodBZ9Fc3j6f2w+MTNcnxteMOrb+QgIouguGOulWi0lieEkOUg+HkjjFs0DGoWDds6bi4E9hpNFLulQ== +jayson@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-4.2.0.tgz#b71762393fa40bc9637eaf734ca6f40d3b8c0c93" + integrity sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg== dependencies: "@types/connect" "^3.4.33" "@types/node" "^12.12.54" @@ -1800,63 +1801,50 @@ jayson@4.1.3: eyes "^0.1.8" isomorphic-ws "^4.0.1" json-stringify-safe "^5.0.1" - JSONStream "^1.3.5" + stream-json "^1.9.1" uuid "^8.3.2" ws "^7.5.10" js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^4.1.0, js-yaml@4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + 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.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + 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-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - kubo-rpc-client@^5.0.2: - version "5.1.0" - resolved "https://registry.npmjs.org/kubo-rpc-client/-/kubo-rpc-client-5.1.0.tgz" - integrity sha512-yTBoyEN1Ymwi0Tzi8+Mfxylg3BRAatzykih8jzwaJjfYCqKUEqCX+43m4X78CdTPRXyIHUbdI9N0DcKRwNwk+A== + version "5.2.0" + resolved "https://registry.yarnpkg.com/kubo-rpc-client/-/kubo-rpc-client-5.2.0.tgz#b8dfe823305ee7bc957f98a01532479b2c7005b7" + integrity sha512-J3ppL1xf7f27NDI9jUPGkr1QiExXLyxUTUwHUMMB1a4AZR4s6113SVXPHRYwe1pFIO3hRb5G+0SuHaxYSfhzBA== dependencies: "@ipld/dag-cbor" "^9.0.0" "@ipld/dag-json" "^10.0.0" @@ -1894,150 +1882,155 @@ kubo-rpc-client@^5.0.2: lilconfig@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== lodash.camelcase@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.kebabcase@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== lodash.lowercase@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.lowercase/-/lodash.lowercase-4.3.0.tgz#46515aced4acb0b7093133333af068e4c3b14e9d" integrity sha512-UcvP1IZYyDKyEL64mmrwoA1AbFu5ahojhTtkOUr1K9dbuxzS9ev8i4TxMMGCqRC9TE8uDaSoufNAXxRPNTseVA== lodash.lowerfirst@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.lowerfirst/-/lodash.lowerfirst-4.3.1.tgz#de3c7b12e02c6524a0059c2f6cb7c5c52655a13d" integrity sha512-UUKX7VhP1/JL54NXg2aq/E1Sfnjjes8fNYTNkPU8ZmsaVeBvPHKdbNaN79Re5XRL01u6wbq3j0cbYZj71Fcu5w== lodash.pad@^4.5.1: version "4.5.1" - resolved "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.pad/-/lodash.pad-4.5.1.tgz#4330949a833a7c8da22cc20f6a26c4d59debba70" integrity sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg== lodash.padend@^4.6.1: version "4.6.1" - resolved "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.padend/-/lodash.padend-4.6.1.tgz#53ccba047d06e158d311f45da625f4e49e6f166e" integrity sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw== lodash.padstart@^4.6.1: version "4.6.1" - resolved "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" integrity sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw== lodash.repeat@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.repeat/-/lodash.repeat-4.1.0.tgz#fc7de8131d8c8ac07e4b49f74ffe829d1f2bec44" integrity sha512-eWsgQW89IewS95ZOcr15HHCX6FVDxq3f2PNUIng3fyzsPev9imFQxIYdFZ6crl8L56UR6ZlGDLcEb3RZsCSSqw== lodash.snakecase@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash.startcase@^4.4.0: version "4.4.0" - resolved "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== lodash.trim@^4.5.1: version "4.5.1" - resolved "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.trim/-/lodash.trim-4.5.1.tgz#36425e7ee90be4aa5e27bcebb85b7d11ea47aa57" integrity sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg== lodash.trimend@^4.5.1: version "4.5.1" - resolved "https://registry.npmjs.org/lodash.trimend/-/lodash.trimend-4.5.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.trimend/-/lodash.trimend-4.5.1.tgz#12804437286b98cad8996b79414e11300114082f" integrity sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA== lodash.trimstart@^4.5.1: version "4.5.1" - resolved "https://registry.npmjs.org/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz#8ff4dec532d82486af59573c39445914e944a7f1" integrity sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ== lodash.uppercase@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/lodash.uppercase/-/lodash.uppercase-4.3.0.tgz#c404abfd1469f93931f9bb24cf6cc7d57059bc73" integrity sha512-+Nbnxkj7s8K5U8z6KnEYPGUOGp3woZbB7Ecs7v3LkkjLQSm2kP9SKIILitN1ktn2mB/tmM9oSlku06I+/lH7QA== lodash.upperfirst@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + 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.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" + 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" long@^5.2.0, long@^5.2.1: - version "5.3.1" - resolved "https://registry.npmjs.org/long/-/long-5.3.1.tgz" - integrity sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng== + version "5.3.2" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" + integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== lru-cache@^11.0.0: version "11.1.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.1.0.tgz#afafb060607108132dbc1cf8ae661afb69486117" integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + 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" +main-event@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/main-event/-/main-event-1.0.1.tgz#f7eceac5787088d6f943b03286d0964d7e893b3a" + integrity sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw== + matchstick-as@0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/matchstick-as/-/matchstick-as-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/matchstick-as/-/matchstick-as-0.6.0.tgz#c65296b1f51b1014d605c52067d9b5321ea630e8" integrity sha512-E36fWsC1AbCkBFt05VsDDRoFvGSdcZg6oZJrtIe/YDBbuFh8SKbR5FcoqDhNWqSN+F7bN/iS2u8Md0SM+4pUpw== dependencies: wabt "1.0.24" math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== merge-options@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== dependencies: is-plain-obj "^2.1.0" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" @@ -2045,107 +2038,107 @@ micromatch@^4.0.8: mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== minimatch@^10.0.0: - version "10.0.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz" - integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ== + version "10.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" + integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== dependencies: - brace-expansion "^2.0.1" + "@isaacs/brace-expansion" "^5.0.0" -minimatch@^3.0.2, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: version "5.1.6" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== dependencies: brace-expansion "^2.0.1" minimatch@^9.0.5: version "9.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== dependencies: brace-expansion "^2.0.1" minipass@^7.1.2: version "7.1.2" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== ms@^2.1.3: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== ms@^3.0.0-canary.1: version "3.0.0-canary.1" - resolved "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-3.0.0-canary.1.tgz#c7b34fbce381492fd0b345d1cf56e14d67b77b80" integrity sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g== -multiformats@^13.0.0, multiformats@^13.1.0, multiformats@^13.3.1: - version "13.3.2" - resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz" - integrity sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g== +multiformats@^13.0.0, multiformats@^13.1.0, multiformats@^13.3.6: + version "13.4.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.4.0.tgz#eada9b939650b69e3e9ac553c8cbffe6b3a57596" + integrity sha512-Mkb/QcclrJxKC+vrcIFl297h52QcKh2Az/9A5vbWytbQt4225UWWWmIuSsKksdww9NkIeYcA7DkfftyLuC/JSg== multiformats@~13.1.3: version "13.1.3" - resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.1.3.tgz#36d312401ff424948ef90746fbda9dd798cffa09" integrity sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw== mute-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== nanoid@^5.0.7: version "5.1.5" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.5.tgz#f7597f9d9054eb4da9548cdd53ca70f1790e87de" integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== native-fetch@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-4.0.2.tgz#75c8a44c5f3bb021713e5e24f2846750883e49af" integrity sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg== npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" object-assign@^4.1.0: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== once@^1.3.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -open@10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/open/-/open-10.1.0.tgz" - integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== +open@10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.2.tgz#d5df40984755c9a9c3c93df8156a12467e882925" + integrity sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw== dependencies: default-browser "^5.2.1" define-lazy-prop "^3.0.0" @@ -2154,7 +2147,7 @@ open@10.1.0: ora@4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/ora/-/ora-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.2.tgz#0e1e68fd45b135d28648b27cf08081fa6e8a297d" integrity sha512-YUOZbamht5mfLxPmk4M35CD/5DuOkAacxlEUbStVXpBAt4fyhBf+vZHI/HRkI++QUp3sNoeA2Gw4C+hi4eGSig== dependencies: chalk "^2.4.2" @@ -2165,24 +2158,19 @@ ora@4.0.2: strip-ansi "^5.2.0" wcwidth "^1.0.1" -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - p-defer@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== p-defer@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-4.0.1.tgz#d12c6d41420785ed0d162dbd86b71ba490f7f99e" integrity sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A== p-fifo@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-fifo/-/p-fifo-1.0.0.tgz#e29d5cf17c239ba87f51dde98c1d26a9cfe20a63" integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== dependencies: fast-fifo "^1.0.0" @@ -2190,7 +2178,7 @@ p-fifo@^1.0.0: p-queue@^8.0.1: version "8.1.0" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-8.1.0.tgz#d71929249868b10b16f885d8a82beeaf35d32279" integrity sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw== dependencies: eventemitter3 "^5.0.1" @@ -2198,29 +2186,29 @@ p-queue@^8.0.1: p-timeout@^6.1.2: version "6.1.4" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.4.tgz#418e1f4dd833fa96a2e3f532547dd2abdb08dbc2" integrity sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg== package-json-from-dist@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + 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-duration@^2.1.2: version "2.1.4" - resolved "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.4.tgz" + resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-2.1.4.tgz#02918736726f657eaf70b52bb8da7910316df51d" integrity sha512-b98m6MsCh+akxfyoz9w9dt0AlH2dfYLOBss5SdDsr9pkhKNvkWBXU/r8A4ahmIGByBOLV2+4YwfCuFxbDDaGyg== parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" + 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" @@ -2228,7 +2216,7 @@ parse-json@^4.0.0: parse-json@^5.0.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + 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" @@ -2238,17 +2226,17 @@ parse-json@^5.0.0: path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-scurry@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== dependencies: lru-cache "^11.0.0" @@ -2256,48 +2244,53 @@ path-scurry@^2.0.0: path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -picocolors@^1.0.0: +picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + pluralize@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== possible-typed-array-names@^1.0.0: version "1.1.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== prettier@3.5.3: version "3.5.3" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== progress-events@^1.0.0, progress-events@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/progress-events/-/progress-events-1.0.1.tgz#693b6d4153f08c1418ae3cd5fcad8596c91db7e8" integrity sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw== proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== protons-runtime@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.5.0.tgz" - integrity sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA== + version "5.6.0" + resolved "https://registry.yarnpkg.com/protons-runtime/-/protons-runtime-5.6.0.tgz#df1ef57497d04529a23ee6020f1c24f1d15db141" + integrity sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg== dependencies: uint8-varint "^2.0.2" uint8arraylist "^2.4.3" @@ -2305,19 +2298,19 @@ protons-runtime@^5.5.0: queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== react-native-fetch-api@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz#81e1bb6562c292521bc4eca52fe1097f4c1ebab5" integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== dependencies: p-defer "^3.0.0" readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -2326,24 +2319,24 @@ readable-stream@^3.6.0: readdirp@^4.0.1: version "4.1.2" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== registry-auth-token@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.1.0.tgz#3c659047ecd4caebd25bc1570a3aa979ae490eca" integrity sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw== dependencies: "@pnpm/npm-conf" "^2.1.0" resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -2351,62 +2344,62 @@ restore-cursor@^3.1.0: reusify@^1.0.4: version "1.1.0" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^2.6.3: version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" run-applescript@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + 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" safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: call-bound "^1.0.2" es-errors "^1.3.0" is-regex "^1.2.1" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@^7.6.3, semver@7.7.1: - version "7.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== - semver@7.3.5: version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +semver@7.7.2, semver@^7.6.3: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -2418,39 +2411,34 @@ set-function-length@^1.2.2: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + 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@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -signal-exit@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== source-map-support@^0.5.20: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + 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" @@ -2458,31 +2446,31 @@ source-map-support@^0.5.20: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +stream-chain@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.5.tgz#b30967e8f14ee033c5b9a19bbe8a2cba90ba0d09" + integrity sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA== + +stream-json@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.9.1.tgz#e3fec03e984a503718946c170db7d74556c2a187" + integrity sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw== + dependencies: + stream-chain "^2.2.5" + stream-to-it@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-1.0.1.tgz#7d5e1b04bab70facd48273279bfa49f0d0165950" integrity sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA== dependencies: it-stream-types "^2.0.1" -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + 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" @@ -2491,7 +2479,7 @@ string_decoder@^1.1.1: string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + 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" @@ -2500,128 +2488,119 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + 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@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + 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.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + 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@^7.0.1: version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + 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.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - supports-color@^8: version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + 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@^9.4.0: version "9.4.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== -"through@>=2.2.7 <3": - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tinyglobby@^0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== + dependencies: + fdir "^6.4.4" + picomatch "^4.0.2" tmp-promise@3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== dependencies: tmp "^0.2.0" -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - tmp@^0.2.0: - version "0.2.3" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + 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" tslib@^2.6.3: version "2.8.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + 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" type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typescript@>=4.9.4: - version "5.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== - uint8-varint@^2.0.1, uint8-varint@^2.0.2: version "2.0.4" - resolved "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/uint8-varint/-/uint8-varint-2.0.4.tgz#85be52b3849eb30f2c3640a2df8a14364180affb" integrity sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw== dependencies: uint8arraylist "^2.0.0" @@ -2629,46 +2608,46 @@ uint8-varint@^2.0.1, uint8-varint@^2.0.2: uint8arraylist@^2.0.0, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: version "2.4.8" - resolved "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz" + resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== dependencies: uint8arrays "^5.0.1" uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.0.3, uint8arrays@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.1.0.tgz#14047c9bdf825d025b7391299436e5e50e7270f1" integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== dependencies: multiformats "^13.0.0" -undici-types@~6.21.0: - version "6.21.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" - integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== +undici-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== -undici@*, undici@7.4.0: - version "7.4.0" - resolved "https://registry.npmjs.org/undici/-/undici-7.4.0.tgz" - integrity sha512-PUQM3/es3noM24oUn10u3kNNap0AbxESOmnssmW+dOi9yGwlUSi5nTNYl3bNbTkWOF8YZDkx2tCmj9OtQ3iGGw== +undici@7.9.0: + version "7.9.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-7.9.0.tgz#09266190e9281cb049ba79ca6a5ec9372175dfd9" + integrity sha512-e696y354tf5cFZPXsF26Yg+5M63+5H3oE6Vtkh2oqbvsE2Oe7s2nIbcQh5lmG7Lp/eS29vJtTpw9+p6PX0qNSg== universalify@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== urlpattern-polyfill@^10.0.0: - version "10.0.0" - resolved "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz" - integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + version "10.1.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" + integrity sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw== util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + 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.npmjs.org/util/-/util-0.12.5.tgz" + 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" @@ -2679,24 +2658,24 @@ util@^0.12.5: uuid@^8.3.2: version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== wabt@1.0.24: version "1.0.24" - resolved "https://registry.npmjs.org/wabt/-/wabt-1.0.24.tgz" + resolved "https://registry.yarnpkg.com/wabt/-/wabt-1.0.24.tgz#c02e0b5b4503b94feaf4a30a426ef01c1bea7c6c" integrity sha512-8l7sIOd3i5GWfTWciPL0+ff/FK/deVK2Q6FN+MPz4vfUcD78i2M/49XJTwF6aml91uIiuXJEsLKWMB2cw/mtKg== wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" weald@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/weald/-/weald-1.0.4.tgz#8858cf9186869deba58357ae10cf26eaada80bb0" integrity sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ== dependencies: ms "^3.0.0-canary.1" @@ -2704,14 +2683,14 @@ weald@^1.0.4: web3-errors@^1.2.0, web3-errors@^1.3.1: version "1.3.1" - resolved "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/web3-errors/-/web3-errors-1.3.1.tgz#163bc4d869f98614760b683d733c3ed1fb415d98" integrity sha512-w3NMJujH+ZSW4ltIZZKtdbkbyQEvBzyp3JRn59Ckli0Nz4VMsVq8aF1bLWM7A2kuQ+yVEm3ySeNU+7mSRwx7RQ== dependencies: web3-types "^1.10.0" web3-eth-abi@4.4.1: version "4.4.1" - resolved "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-4.4.1.tgz#1dca9d80341b3cd7a1ae07dc98080c2073d62a29" integrity sha512-60ecEkF6kQ9zAfbTY04Nc9q4eEYM0++BySpGi8wZ2PD1tw/c0SDvsKhV6IKURxLJhsDlb08dATc3iD6IbtWJmg== dependencies: abitype "0.7.1" @@ -2722,12 +2701,12 @@ web3-eth-abi@4.4.1: web3-types@^1.10.0, web3-types@^1.6.0: version "1.10.0" - resolved "https://registry.npmjs.org/web3-types/-/web3-types-1.10.0.tgz" + resolved "https://registry.yarnpkg.com/web3-types/-/web3-types-1.10.0.tgz#41b0b4d2dd75e919d5b6f37bf139e29f445db04e" integrity sha512-0IXoaAFtFc8Yin7cCdQfB9ZmjafrbP6BO0f0KT/khMhXKUpoJ6yShrVhiNpyRBo8QQjuOagsWzwSK2H49I7sbw== web3-utils@^4.3.3: version "4.3.3" - resolved "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.3.tgz" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.3.3.tgz#e380a1c03a050d3704f94bd08c1c9f50a1487205" integrity sha512-kZUeCwaQm+RNc2Bf1V3BYbF29lQQKz28L0y+FA4G0lS8IxtJVGi5SeDTUkpwqqkdHHC7JcapPDnyyzJ1lfWlOw== dependencies: ethereum-cryptography "^2.0.0" @@ -2738,7 +2717,7 @@ web3-utils@^4.3.3: web3-validator@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.6.tgz#a0cdaa39e1d1708ece5fae155b034e29d6a19248" integrity sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg== dependencies: ethereum-cryptography "^2.0.0" @@ -2749,14 +2728,14 @@ web3-validator@^2.0.6: wherearewe@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/wherearewe/-/wherearewe-2.0.1.tgz#37c97a7bf112dca8db34bfefb2f6c997af312bb8" integrity sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw== dependencies: is-electron "^2.2.0" which-typed-array@^1.1.16, which-typed-array@^1.1.2: version "1.1.19" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" @@ -2767,28 +2746,28 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.2: gopd "^1.2.0" has-tostringtag "^1.0.2" -which@^2.0.1, which@2.0.2: +which@2.0.2, which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" widest-line@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + 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" @@ -2797,7 +2776,7 @@ wordwrap@^1.0.0: wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + 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" @@ -2806,7 +2785,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + 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" @@ -2815,7 +2794,7 @@ wrap-ansi@^7.0.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -2824,45 +2803,45 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@*, ws@^7.5.10: +ws@^7.5.10: version "7.5.10" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" + integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== + yaml@^1.10.0: version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.2.2: - version "2.7.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz" - integrity sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ== - -yaml@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz" - integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== yargs-parser@^21.0.0: version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yoctocolors-cjs@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== -"zod@^3 >=3.19.1", zod@^3.21.4: - version "3.24.2" - resolved "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz" - integrity sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ== +zod@^3.21.4: + version "3.25.76" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" + integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== From 2b99bb8cb26fb86997313df8d06e0ec59de822a7 Mon Sep 17 00:00:00 2001 From: kaola526 Date: Wed, 10 Sep 2025 08:59:16 +0800 Subject: [PATCH 51/51] filecoin-testnet use goldsky rpc --- subgraph-client/src/contexts/NetworkContext.tsx | 6 +++--- subgraph/subgraph.yaml | 12 ++++++------ subgraph/utils/index.ts | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/subgraph-client/src/contexts/NetworkContext.tsx b/subgraph-client/src/contexts/NetworkContext.tsx index d4b66a5..d5e0425 100644 --- a/subgraph-client/src/contexts/NetworkContext.tsx +++ b/subgraph-client/src/contexts/NetworkContext.tsx @@ -32,9 +32,9 @@ export const NetworkProvider = ({ children }: { children: ReactNode }) => { 'calibration', } - if (network === 'calibration') { - return `https://pdpsql.vxb.ai/subgraphs/name/pd/${PROJECT_NAME}` - } + // if (network === 'calibration') { + // return `https://pdpsql.vxb.ai/subgraphs/name/pd/${PROJECT_NAME}` + // } return `https://api.goldsky.com/api/public/${PROJECT_ID}/subgraphs/${PROJECT_NAME}/${versions[network]}/gn` } diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index e72f679..7dab13c 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -6,11 +6,11 @@ schema: dataSources: - kind: ethereum name: PDPVerifier - network: filecoin + network: filecoin-testnet source: - address: "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6" + address: "0x5A23b7df87f59A291C26A2A1d684AD03Ce9B68DC" abi: PDPVerifier - startBlock: 4853581 + startBlock: 2473969 mapping: kind: ethereum/events apiVersion: 0.0.9 @@ -52,11 +52,11 @@ dataSources: file: ./src/pdp-verifier.ts - kind: ethereum name: PDPService - network: filecoin + network: filecoin-testnet source: - address: "0x805370387fA5Bd8053FD8f7B2da4055B9a4f8019" + address: "0x6170dE2b09b404776197485F3dc6c968Ef948505" abi: PDPService - startBlock: 4853585 + startBlock: 2474017 mapping: kind: ethereum/events apiVersion: 0.0.9 diff --git a/subgraph/utils/index.ts b/subgraph/utils/index.ts index 65d7eb1..f9d8c61 100644 --- a/subgraph/utils/index.ts +++ b/subgraph/utils/index.ts @@ -1,4 +1,4 @@ -export const PDPVerifierAddress = "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6"; +export const PDPVerifierAddress = "0x5A23b7df87f59A291C26A2A1d684AD03Ce9B68DC"; export const NumChallenges = 5;

    Proof Set IDData Set ID Owner StatusTotal RootsProved RootsTotal PiecesProved Pieces Data Size Last Proof Epoch Next Challenge
    #Proof Set IDData Set ID Status Data SizeRootsPieces Last Proven Epoch Created At
    Provider ID Status Data SizeProof SetsTotal RootsData SetsTotal Pieces Faults Joined Date
    - Proof Sets + Data Sets Providers - Roots + Pieces Data Size - Faulted Roots + Faulted Pieces
    - Proof Sets + Data Sets Providers - Roots + Pieces Data Size - Faulted Roots + Faulted Pieces
    - Roots + Pieces Gas Units @@ -373,7 +373,7 @@ export const GasCalculator = () => {
    { } = useGraphQL<{ networkMetric: NetworkMetrics providers: Provider[] - proofSets: ProofSet[] + proofSets: DataSet[] }>( landingDataQuery, { @@ -122,7 +122,7 @@ export const Landing = () => { { >

    - {result.type === 'root' ? 'Proof Set' : result.type} + {result.type === 'root' ? 'Data Set' : result.type} {result.id}

    @@ -228,7 +228,7 @@ export const Landing = () => { />
    - {/* Recent Proof Sets and Providers Sections */} + {/* Recent Data Sets and Providers Sections */}
    {/* Recent Providers */}
    @@ -251,10 +251,10 @@ export const Landing = () => {
    - {/* Recent Proof Sets */} + {/* Recent Data Sets */}
    -

    Recent Proof Sets

    +

    Recent Data Sets

    { // Basic ID Validation if (!proofSetId || !/^\d+$/.test(proofSetId)) { return ( -
    Invalid Proof Set ID provided.
    +
    Invalid Data Set ID provided.
    ) } @@ -75,7 +75,7 @@ export const ProofSetDetails = () => { {/* Show title only if core proofSet data loaded, avoid showing before ID is confirmed valid */} {proofSet && (

    - Proof Set Details: {proofSetId} + Data Set Details: {proofSetId}

    )}
    diff --git a/subgraph-client/src/pages/ProofSets.tsx b/subgraph-client/src/pages/ProofSets.tsx index d5e6fc7..962a618 100644 --- a/subgraph-client/src/pages/ProofSets.tsx +++ b/subgraph-client/src/pages/ProofSets.tsx @@ -5,7 +5,7 @@ import { Pagination } from '@/components/ui/pagination' import { useValidatedNumberDebounce } from '@/hooks/useValidatedNumberDebounce' import useGraphQL from '@/hooks/useGraphQL' import { networkMetricsQuery, landingProofSetsQuery } from '@/utility/queries' -import type { ProofSet, NetworkMetrics } from '@/utility/types' +import type { DataSet, NetworkMetrics } from '@/utility/types' import { ProofSetsTable } from '@/components/ProofSets/ProofSetsTable' import PageHeader from '@/components/page-header' @@ -26,7 +26,7 @@ export const ProofSets = () => { data: proofSetsData, error: proofSetsError, isLoading: proofSetsLoading, - } = useGraphQL<{ proofSets: ProofSet[] }>( + } = useGraphQL<{ proofSets: DataSet[] }>( landingProofSetsQuery, { first: ITEMS_PER_PAGE, @@ -60,13 +60,13 @@ export const ProofSets = () => {
    -

    Proof Sets

    +

    Data Sets

    setSearchQuery(e.target.value)} className={`pl-8 ${searchError ? 'border-red-500' : ''}`} diff --git a/subgraph-client/src/pages/ServiceDetails.tsx b/subgraph-client/src/pages/ServiceDetails.tsx index 3d6df8e..76f930d 100644 --- a/subgraph-client/src/pages/ServiceDetails.tsx +++ b/subgraph-client/src/pages/ServiceDetails.tsx @@ -7,7 +7,7 @@ import { Pagination } from '@/components/ui/pagination' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' import { AlertTriangle } from 'lucide-react' import { formatDataSize } from '@/utility/helper' -import { Service, ProofSet, ProviderLink } from '@/utility/types' +import { Service, DataSet, ProviderLink } from '@/utility/types' import useGraphQL from '@/hooks/useGraphQL' import { serviceDetailsQuery, serviceProvidersQuery } from '@/utility/queries' import { CopyableText } from '@/components/shared/CopyableText' @@ -26,7 +26,7 @@ export const ServiceDetails = () => { // Define types for GraphQL responses interface ServiceDetailsResponse { service: Service & { - proofSets: ProofSet[] + proofSets: DataSet[] } } @@ -137,7 +137,7 @@ export const ServiceDetails = () => { ) : (
    { value={formatDataSize(service?.totalDataSize || '0')} /> { - {/* Tabs for Proof Sets and Providers */} + {/* Tabs for Data Sets and Providers */} Providers - Proof Sets + Data Sets diff --git a/subgraph-client/src/utility/queries.ts b/subgraph-client/src/utility/queries.ts index 0febf31..3081e8f 100644 --- a/subgraph-client/src/utility/queries.ts +++ b/subgraph-client/src/utility/queries.ts @@ -112,7 +112,7 @@ query LandingProofSets($first: Int, $skip: Int, $where: ProofSet_filter, $orderB }` export const proofSetQuery = ` -query ProofSet($where: ProofSet_filter, $first: Int, $skip: Int) { +query DataSet($where: ProofSet_filter, $first: Int, $skip: Int) { proofSets(where: $where, first: 1, skip: 0) { id setId @@ -177,7 +177,7 @@ query EventLogs($first: Int, $skip: Int, $where: EventLog_filter) { }` export const rootsQuery = ` -query Roots($first: Int, $skip: Int, $where: Root_filter) { +query Pieces($first: Int, $skip: Int, $where: Root_filter) { roots(first: $first, skip: $skip, where: $where, orderBy: rootId, orderDirection: desc) { cid id diff --git a/subgraph-client/src/utility/types.ts b/subgraph-client/src/utility/types.ts index c2dc75c..154e9d3 100644 --- a/subgraph-client/src/utility/types.ts +++ b/subgraph-client/src/utility/types.ts @@ -24,10 +24,10 @@ export interface Provider { createdAt: string updatedAt: string blockNumber: string - proofSets: ProofSet[] + proofSets: DataSet[] } -export interface ProofSet { +export interface DataSet { id: string setId: string isActive: boolean @@ -64,7 +64,7 @@ export interface Root { lastProvenAt: string lastFaultedAt: string - proofSet?: ProofSet + proofSet?: DataSet } export interface Transaction { @@ -134,6 +134,6 @@ export interface Service { totalFaultedPeriods: string createdAt: string updatedAt: string - proofSets?: ProofSet[] + proofSets?: DataSet[] providerLinks?: ProviderLink[] } diff --git a/subgraph/schema.graphql b/subgraph/schema.graphql index a7dc58c..d30bcac 100644 --- a/subgraph/schema.graphql +++ b/subgraph/schema.graphql @@ -1,4 +1,4 @@ -type ProofSet @entity(immutable: false) { +type DataSet @entity(immutable: false) { id: Bytes! # setId setId: BigInt! # uint256 listener: Service! # address @@ -43,7 +43,7 @@ type Service @entity(immutable: false) { createdAt: BigInt! updatedAt: BigInt! # Relationships - proofSets: [ProofSet!]! @derivedFrom(field: "listener") + proofSets: [DataSet!]! @derivedFrom(field: "listener") providerLinks: [ServiceProviderLink!]! @derivedFrom(field: "service") } @@ -68,7 +68,7 @@ type Provider @entity(immutable: false) { blockNumber: BigInt! # Derived relationship - proofSets: [ProofSet!]! @derivedFrom(field: "owner") + proofSets: [DataSet!]! @derivedFrom(field: "owner") serviceLinks: [ServiceProviderLink!]! @derivedFrom(field: "provider") weeklyProviderActivities: [WeeklyProviderActivity!]! @derivedFrom(field: "provider") @@ -95,7 +95,7 @@ type Root @entity(immutable: false) { blockNumber: BigInt! # Relationship - proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + proofSet: DataSet! # Link to DataSet (stores DataSet ID) # Derived relationships faultRecords: [FaultRecord!]! @derivedFrom(field: "roots") # For many-to-many derived } @@ -121,7 +121,7 @@ type EventLog @entity(immutable: true) { blockNumber: BigInt! # Relationships - proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + proofSet: DataSet! # Link to DataSet (stores DataSet ID) transaction: Transaction! # Link to Transaction (stores Transaction hash) } @@ -138,7 +138,7 @@ type Transaction @entity(immutable: true) { createdAt: BigInt! # Relationship - proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + proofSet: DataSet! # Link to DataSet (stores DataSet ID) # Derived relationship eventLogs: [EventLog!]! @derivedFrom(field: "transaction") } @@ -155,8 +155,8 @@ type FaultRecord @entity(immutable: true) { blockNumber: BigInt! # Relationships - proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) - roots: [Root!]! # Link to Roots (stores array of Root IDs) + proofSet: DataSet! # Link to DataSet (stores DataSet ID) + roots: [Root!]! # Link to Pieces (stores array of Root IDs) } # Metrices @@ -221,7 +221,7 @@ type WeeklyProofSetActivity @entity(immutable: false) { totalFaultedRoots: BigInt! # uint256 totalFaultedPeriods: BigInt! # uint256 # Relationships - proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + proofSet: DataSet! # Link to DataSet (stores DataSet ID) } type MonthlyProofSetActivity @entity(immutable: false) { @@ -236,5 +236,5 @@ type MonthlyProofSetActivity @entity(immutable: false) { totalFaultedRoots: BigInt! # uint256 totalFaultedPeriods: BigInt! # uint256 # Relationships - proofSet: ProofSet! # Link to ProofSet (stores ProofSet ID) + proofSet: DataSet! # Link to DataSet (stores DataSet ID) } diff --git a/subgraph/src/pdp-service.ts b/subgraph/src/pdp-service.ts index af24899..b9690ae 100644 --- a/subgraph/src/pdp-service.ts +++ b/subgraph/src/pdp-service.ts @@ -4,7 +4,7 @@ import { PDPVerifier } from "../generated/PDPVerifier/PDPVerifier"; import { PDPVerifierAddress, NumChallenges } from "../utils"; import { EventLog, - ProofSet, + DataSet, Provider, FaultRecord, Root, @@ -126,7 +126,7 @@ export function findChallengedRoots( const challenges: BigInt[] = []; if (totalLeaves.isZero()) { log.warning( - "findChallengedRoots: totalLeaves is zero for ProofSet {}. Cannot generate challenges.", + "findChallengedRoots: totalLeaves is zero for DataSet {}. Cannot generate challenges.", [proofSetId.toString()] ); return []; @@ -170,9 +170,9 @@ export function handleFaultRecord(event: FaultRecordEvent): void { const entityId = getEventLogEntityId(event.transaction.hash, event.logIndex); const transactionEntityId = getTransactionEntityId(event.transaction.hash); - const proofSet = ProofSet.load(proofSetEntityId); + const proofSet = DataSet.load(proofSetEntityId); if (!proofSet) { - log.warning("handleFaultRecord: ProofSet {} not found for event tx {}", [ + log.warning("handleFaultRecord: DataSet {} not found for event tx {}", [ setId.toString(), event.transaction.hash.toHex(), ]); @@ -222,7 +222,7 @@ export function handleFaultRecord(event: FaultRecordEvent): void { if (rootIds.length === 0) { log.info( - "handleFaultRecord: No roots found for challenge epoch {} in ProofSet {}", + "handleFaultRecord: No roots found for challenge epoch {} in DataSet {}", [challengeEpoch.toString(), setId.toString()] ); } @@ -304,7 +304,7 @@ export function handleFaultRecord(event: FaultRecordEvent): void { provider.blockNumber = event.block.number; provider.save(); } else { - log.warning("handleFaultRecord: Provider {} not found for ProofSet {}", [ + log.warning("handleFaultRecord: Provider {} not found for DataSet {}", [ proofSetOwner.toHex(), setId.toString(), ]); diff --git a/subgraph/src/pdp-verifier.ts b/subgraph/src/pdp-verifier.ts index 0b1f90b..881fcee 100644 --- a/subgraph/src/pdp-verifier.ts +++ b/subgraph/src/pdp-verifier.ts @@ -13,7 +13,7 @@ import { import { EventLog, Provider, - ProofSet, + DataSet, Root, Transaction, Service, @@ -100,8 +100,8 @@ export function handleProofSetCreated(event: ProofSetCreatedEvent): void { transaction.save(); } - // Create ProofSet - let proofSet = new ProofSet(proofSetEntityId); + // Create DataSet + let proofSet = new DataSet(proofSetEntityId); proofSet.setId = event.params.setId; proofSet.owner = providerEntityId; // Link to Provider via owner address (which is Provider's ID) proofSet.listener = listenerAddr; @@ -279,14 +279,14 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { transaction.method = "deleteProofSet"; // Example method name transaction.status = true; transaction.createdAt = event.block.timestamp; - transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.proofSet = proofSetEntityId; // Link to DataSet transaction.save(); } - // Load ProofSet - const proofSet = ProofSet.load(proofSetEntityId); + // Load DataSet + const proofSet = DataSet.load(proofSetEntityId); if (!proofSet) { - log.warning("ProofSetDeleted: ProofSet {} not found", [setId.toString()]); + log.warning("ProofSetDeleted: DataSet {} not found", [setId.toString()]); return; } @@ -306,13 +306,13 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { provider.blockNumber = event.block.number; provider.save(); } else { - log.warning("ProofSetDeleted: Provider {} for ProofSet {} not found", [ + log.warning("ProofSetDeleted: Provider {} for DataSet {} not found", [ ownerAddress.toHexString(), setId.toString(), ]); } - // Update ProofSet + // Update DataSet proofSet.isActive = false; proofSet.owner = Bytes.empty(); proofSet.totalRoots = BigInt.fromI32(0); @@ -327,9 +327,9 @@ export function handleProofSetDeleted(event: ProofSetDeletedEvent): void { proofSet.blockNumber = event.block.number; proofSet.save(); - // Note: Roots associated with this ProofSet are not automatically removed or updated here. - // They still exist but are linked to an inactive ProofSet. - // Consider if Roots should be marked as inactive or removed in handleRootsRemoved if needed. + // Note: Pieces associated with this DataSet are not automatically removed or updated here. + // They still exist but are linked to an inactive DataSet. + // Consider if Pieces should be marked as inactive or removed in handleRootsRemoved if needed. } export function handleProofSetOwnerChanged( @@ -374,14 +374,14 @@ export function handleProofSetOwnerChanged( transaction.method = "claimProofSetOwnership"; // Example method name transaction.status = true; transaction.createdAt = event.block.timestamp; - transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.proofSet = proofSetEntityId; // Link to DataSet transaction.save(); } - // Load ProofSet - const proofSet = ProofSet.load(proofSetEntityId); + // Load DataSet + const proofSet = DataSet.load(proofSetEntityId); if (!proofSet) { - log.warning("ProofSetOwnerChanged: ProofSet {} not found", [ + log.warning("ProofSetOwnerChanged: DataSet {} not found", [ setId.toString(), ]); return; @@ -457,7 +457,7 @@ export function handleProofSetOwnerChanged( newProvider.updatedAt = event.block.timestamp; newProvider.save(); - // Update ProofSet Owner (this updates the derived relationship on both old and new Provider) + // Update DataSet Owner (this updates the derived relationship on both old and new Provider) proofSet.owner = newOwner; // Set owner to the new provider's ID proofSet.totalTransactions = proofSet.totalTransactions.plus( BigInt.fromI32(1) @@ -499,8 +499,8 @@ export function handleProofFeePaid(event: ProofFeePaidEvent): void { eventLog.transaction = transactionEntityId; eventLog.save(); - // Update ProofSet total fee paid - const proofSet = ProofSet.load(proofSetEntityId); + // Update DataSet total fee paid + const proofSet = DataSet.load(proofSetEntityId); if (proofSet) { proofSet.totalFeePaid = proofSet.totalFeePaid.plus(fee); proofSet.totalEventLogs = proofSet.totalEventLogs.plus(BigInt.fromI32(1)); @@ -508,7 +508,7 @@ export function handleProofFeePaid(event: ProofFeePaidEvent): void { proofSet.blockNumber = event.block.number; proofSet.save(); } else { - log.warning("ProofFeePaid: ProofSet {} not found", [setId.toString()]); + log.warning("ProofFeePaid: DataSet {} not found", [setId.toString()]); } } @@ -537,8 +537,8 @@ export function handleProofSetEmpty(event: ProofSetEmptyEvent): void { eventLog.transaction = transactionEntityId; eventLog.save(); - // Update ProofSet - const proofSet = ProofSet.load(proofSetEntityId); + // Update DataSet + const proofSet = DataSet.load(proofSetEntityId); if (proofSet) { const oldTotalDataSize = proofSet.totalDataSize; // Store size before zeroing @@ -563,16 +563,16 @@ export function handleProofSetEmpty(event: ProofSetEmptyEvent): void { provider.save(); } else { // It's possible the provider was deleted or owner changed before this event - log.warning("ProofSetEmpty: Provider {} for ProofSet {} not found", [ + log.warning("ProofSetEmpty: Provider {} for DataSet {} not found", [ proofSet.owner.toHexString(), setId.toString(), ]); } } else { - log.warning("ProofSetEmpty: ProofSet {} not found", [setId.toString()]); + log.warning("ProofSetEmpty: DataSet {} not found", [setId.toString()]); } // Note: This event implies all roots are gone. Existing Root entities - // linked to this ProofSet might need to be marked as removed or deleted + // linked to this DataSet might need to be marked as removed or deleted // depending on the desired data retention policy. This handler doesn't do that. // Consider adding logic here or in handleRootsRemoved if needed. } @@ -627,7 +627,7 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { transaction.method = "provePossession"; // Example method name transaction.status = true; transaction.createdAt = currentTimestamp; - transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.proofSet = proofSetEntityId; // Link to DataSet transaction.save(); } @@ -667,8 +667,8 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { } } - // Update ProofSet (once per event) - const proofSet = ProofSet.load(proofSetEntityId); + // Update DataSet (once per event) + const proofSet = DataSet.load(proofSetEntityId); if (proofSet) { proofSet.lastProvenEpoch = currentBlockNumber; // Update last proven epoch for the set proofSet.totalProvedRoots = proofSet.totalProvedRoots.plus( @@ -724,7 +724,7 @@ export function handlePossessionProven(event: PossessionProvenEvent): void { ["add", "add"] ); } else { - log.warning("PossessionProven: ProofSet {} not found", [setId.toString()]); + log.warning("PossessionProven: DataSet {} not found", [setId.toString()]); } // Update network metrics @@ -775,12 +775,12 @@ export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { transaction.method = "nextProvingPeriod"; // Example method name transaction.status = true; transaction.createdAt = event.block.timestamp; - transaction.proofSet = proofSetEntityId; // Link to ProofSet + transaction.proofSet = proofSetEntityId; // Link to DataSet transaction.save(); } - // Update Proof Set - const proofSet = ProofSet.load(proofSetEntityId); + // Update Data Set + const proofSet = DataSet.load(proofSetEntityId); if (proofSet) { proofSet.nextChallengeEpoch = challengeEpoch; proofSet.challengeRange = leafCount; @@ -792,7 +792,7 @@ export function handleNextProvingPeriod(event: NextProvingPeriodEvent): void { proofSet.blockNumber = event.block.number; proofSet.save(); } else { - log.warning("NextProvingPeriod: ProofSet {} not found", [setId.toString()]); + log.warning("NextProvingPeriod: DataSet {} not found", [setId.toString()]); } } @@ -856,10 +856,10 @@ export function handleRootsAdded(event: RootsAddedEvent): void { transaction.save(); } - // Load ProofSet - const proofSet = ProofSet.load(proofSetEntityId); + // Load DataSet + const proofSet = DataSet.load(proofSetEntityId); if (!proofSet) { - log.warning("handleRootsAdded: ProofSet {} not found for event tx {}", [ + log.warning("handleRootsAdded: DataSet {} not found for event tx {}", [ setId.toString(), event.transaction.hash.toHex(), ]); @@ -988,7 +988,7 @@ export function handleRootsAdded(event: RootsAddedEvent): void { root.createdAt = event.block.timestamp; root.updatedAt = event.block.timestamp; root.blockNumber = event.block.number; - root.proofSet = proofSetEntityId; // Link to ProofSet + root.proofSet = proofSetEntityId; // Link to DataSet root.save(); @@ -1004,7 +1004,7 @@ export function handleRootsAdded(event: RootsAddedEvent): void { totalDataSizeAdded = totalDataSizeAdded.plus(rawSize); } - // Update ProofSet stats + // Update DataSet stats proofSet.totalRoots = proofSet.totalRoots.plus( BigInt.fromI32(addedRootCount) ); // Use correct field name @@ -1034,7 +1034,7 @@ export function handleRootsAdded(event: RootsAddedEvent): void { provider.blockNumber = event.block.number; provider.save(); } else { - log.warning("handleRootsAdded: Provider {} for ProofSet {} not found", [ + log.warning("handleRootsAdded: Provider {} for DataSet {} not found", [ proofSet.owner.toHex(), setId.toString(), ]); @@ -1134,10 +1134,10 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { eventLog.transaction = transactionEntityId; eventLog.save(); - // Load ProofSet - const proofSet = ProofSet.load(proofSetEntityId); + // Load DataSet + const proofSet = DataSet.load(proofSetEntityId); if (!proofSet) { - log.warning("handleRootsRemoved: ProofSet {} not found for event tx {}", [ + log.warning("handleRootsRemoved: DataSet {} not found for event tx {}", [ setId.toString(), event.transaction.hash.toHex(), ]); @@ -1180,7 +1180,7 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { } } - // Update ProofSet stats + // Update DataSet stats proofSet.totalRoots = proofSet.totalRoots.minus( BigInt.fromI32(removedRootCount) ); // Use correct field name @@ -1193,21 +1193,21 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { if (proofSet.totalRoots.lt(BigInt.fromI32(0))) { // Use correct field name log.warning( - "handleRootsRemoved: ProofSet {} rootCount went negative. Setting to 0.", + "handleRootsRemoved: DataSet {} rootCount went negative. Setting to 0.", [setId.toString()] ); proofSet.totalRoots = BigInt.fromI32(0); // Use correct field name } if (proofSet.totalDataSize.lt(BigInt.fromI32(0))) { log.warning( - "handleRootsRemoved: ProofSet {} totalDataSize went negative. Setting to 0.", + "handleRootsRemoved: DataSet {} totalDataSize went negative. Setting to 0.", [setId.toString()] ); proofSet.totalDataSize = BigInt.fromI32(0); } if (proofSet.leafCount.lt(BigInt.fromI32(0))) { log.warning( - "handleRootsRemoved: ProofSet {} leafCount went negative. Setting to 0.", + "handleRootsRemoved: DataSet {} leafCount went negative. Setting to 0.", [setId.toString()] ); proofSet.leafCount = BigInt.fromI32(0); @@ -1244,7 +1244,7 @@ export function handleRootsRemoved(event: RootsRemovedEvent): void { provider.blockNumber = event.block.number; provider.save(); } else { - log.warning("handleRootsRemoved: Provider {} for ProofSet {} not found", [ + log.warning("handleRootsRemoved: Provider {} for DataSet {} not found", [ proofSet.owner.toHex(), setId.toString(), ]); diff --git a/subgraph/subgraph.yaml b/subgraph/subgraph.yaml index f6013e5..7dab13c 100644 --- a/subgraph/subgraph.yaml +++ b/subgraph/subgraph.yaml @@ -6,17 +6,17 @@ schema: dataSources: - kind: ethereum name: PDPVerifier - network: filecoin + network: filecoin-testnet source: - address: "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6" + address: "0x5A23b7df87f59A291C26A2A1d684AD03Ce9B68DC" abi: PDPVerifier - startBlock: 4853581 + startBlock: 2473969 mapping: kind: ethereum/events apiVersion: 0.0.9 language: wasm/assemblyscript entities: - - ProofSet + - DataSet - Provider - Root - SumTreeCount @@ -52,17 +52,17 @@ dataSources: file: ./src/pdp-verifier.ts - kind: ethereum name: PDPService - network: filecoin + network: filecoin-testnet source: - address: "0x805370387fA5Bd8053FD8f7B2da4055B9a4f8019" + address: "0x6170dE2b09b404776197485F3dc6c968Ef948505" abi: PDPService - startBlock: 4853585 + startBlock: 2474017 mapping: kind: ethereum/events apiVersion: 0.0.9 language: wasm/assemblyscript entities: - - ProofSet + - DataSet - Root - SumTreeCount - EventLog diff --git a/subgraph/tests/pdp-verifier.test.ts b/subgraph/tests/pdp-verifier.test.ts index 50284c9..c9bbca8 100644 --- a/subgraph/tests/pdp-verifier.test.ts +++ b/subgraph/tests/pdp-verifier.test.ts @@ -7,7 +7,7 @@ import { afterAll, } from "matchstick-as/assembly/index"; import { BigInt, Address, Bytes, ByteArray } from "@graphprotocol/graph-ts"; -import { Root, ProofSet, Provider, EventLog } from "../generated/schema"; +import { Root, DataSet, Provider, EventLog } from "../generated/schema"; import { handleRootsAdded, handleProofSetCreated } from "../src/pdp-verifier"; import { createRootsAddedEvent, @@ -52,7 +52,7 @@ function stringToBytes32(str: string): Bytes { describe("handleRootsAdded Tests", () => { beforeAll(() => { - // 1. Create the necessary ProofSet first + // 1. Create the necessary DataSet first let mockProofSetCreatedEvent = createProofSetCreatedEvent( SET_ID, SENDER_ADDRESS, @@ -89,24 +89,24 @@ describe("handleRootsAdded Tests", () => { test("Entities created and stored correctly", () => { // Assert counts - assert.entityCount("ProofSet", 1); + assert.entityCount("DataSet", 1); assert.entityCount("Root", 1); // One root was added assert.entityCount("Provider", 1); assert.entityCount("EventLog", 2); // RootsAdded creates one event log - // --- Assert ProofSet fields --- + // --- Assert DataSet fields --- let proofSetId = PROOF_SET_ID_BYTES.toHex(); - assert.fieldEquals("ProofSet", proofSetId, "setId", SET_ID.toString()); - assert.fieldEquals("ProofSet", proofSetId, "totalRoots", "1"); // Initially 0, added 1 + assert.fieldEquals("DataSet", proofSetId, "setId", SET_ID.toString()); + assert.fieldEquals("DataSet", proofSetId, "totalRoots", "1"); // Initially 0, added 1 let expectedTotalSize = RAW_SIZE_1.toString(); assert.fieldEquals( - "ProofSet", + "DataSet", proofSetId, "totalDataSize", expectedTotalSize ); - assert.fieldEquals("ProofSet", proofSetId, "updatedAt", "100"); - assert.fieldEquals("ProofSet", proofSetId, "blockNumber", "50"); + assert.fieldEquals("DataSet", proofSetId, "updatedAt", "100"); + assert.fieldEquals("DataSet", proofSetId, "blockNumber", "50"); // --- Assert Root fields --- let rootEntityId1 = createRootEntityId( diff --git a/subgraph/utils/index.ts b/subgraph/utils/index.ts index 65d7eb1..f9d8c61 100644 --- a/subgraph/utils/index.ts +++ b/subgraph/utils/index.ts @@ -1,4 +1,4 @@ -export const PDPVerifierAddress = "0x9C65E8E57C98cCc040A3d825556832EA1e9f4Df6"; +export const PDPVerifierAddress = "0x5A23b7df87f59A291C26A2A1d684AD03Ce9B68DC"; export const NumChallenges = 5; From 4a78d1aa455e5e45ef15dfdcb75a9d70f8e0ded6 Mon Sep 17 00:00:00 2001 From: kaola526 Date: Fri, 1 Aug 2025 16:11:36 +0800 Subject: [PATCH 49/51] Renaming of data fields --- backend/indexer/internal/infrastructure/database/postgres.go | 2 +- client/src/components/proof-heatmap.tsx | 2 +- client/src/pages/ProofSetDetails.tsx | 4 ++-- client/src/pages/ProviderDetails.tsx | 2 +- subgraph-client/src/components/Landing/NetworkStatsCard.tsx | 2 +- .../src/components/ProofSetDetails/ProofHeatmap.tsx | 2 +- subgraph-client/src/components/ProofSetDetails/RootsTable.tsx | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/backend/indexer/internal/infrastructure/database/postgres.go b/backend/indexer/internal/infrastructure/database/postgres.go index 863bb7f..10f636f 100644 --- a/backend/indexer/internal/infrastructure/database/postgres.go +++ b/backend/indexer/internal/infrastructure/database/postgres.go @@ -77,7 +77,7 @@ func (p *PostgresDB) DeleteReorgedData(ctx context.Context, startHeight, endHeig return fmt.Errorf("failed to delete reorged proof sets: %w", err) } - // Proofs + // Data if err := p.DeleteReorgedProofs(ctx, startHeight, endHeight); err != nil { return fmt.Errorf("failed to delete reorged proofs: %w", err) } diff --git a/client/src/components/proof-heatmap.tsx b/client/src/components/proof-heatmap.tsx index c569e5f..14ab7b5 100644 --- a/client/src/components/proof-heatmap.tsx +++ b/client/src/components/proof-heatmap.tsx @@ -72,7 +72,7 @@ const ProofHeatMap = ({ roots }: { roots: Pieces[] }) => {

    Root ID: {root.rootId}

    CID: {root.cid}

    - Total Proofs: {root.totalProofsSubmitted} + Total Data: {root.totalProofsSubmitted}

    Total Faulted Periods: {root.totalPeriodsFaulted} diff --git a/client/src/pages/ProofSetDetails.tsx b/client/src/pages/ProofSetDetails.tsx index 4cea52b..e0be4a0 100644 --- a/client/src/pages/ProofSetDetails.tsx +++ b/client/src/pages/ProofSetDetails.tsx @@ -303,7 +303,7 @@ export const ProofSetDetails = () => { {proofSet.totalRoots || 0}

    - Total Proofs Submitted: + Total Data Submitted: {proofSet.totalProvedRoots || 0}
    @@ -356,7 +356,7 @@ export const ProofSetDetails = () => {
    Cid Raw Size RemovedTotal ProofsTotal Data Total Fault Periods LastProvenEpoch Last Faulted EpochRoot CID Size StatusProofsData Faults Last Proven Last Faulted
    = ({ - {proofSet.isActive ? 'Active' : 'Inactive'} + {dataSet.isActive ? 'Active' : 'Inactive'} {proofSet.totalRoots}{formatDataSize(proofSet.totalDataSize)}{formatDate(proofSet.createdAt, true)}{dataSet.totalRoots}{formatDataSize(dataSet.totalDataSize)}{formatDate(dataSet.createdAt, true)}
    - {proofSet.setId} + {dataSet.setId} - {`${proofSet.owner.address.substring( + {`${dataSet.owner.address.substring( 0, 10 - )}...${proofSet.owner.address.substring( - proofSet.owner.address.length - 8 + )}...${dataSet.owner.address.substring( + dataSet.owner.address.length - 8 )}`} - {proofSet.isActive ? 'Active' : 'Inactive'} + {dataSet.isActive ? 'Active' : 'Inactive'} {proofSet.totalRoots}{proofSet.totalProvedRoots}{formatDataSize(proofSet.totalDataSize)}{dataSet.totalRoots}{dataSet.totalProvedRoots}{formatDataSize(dataSet.totalDataSize)} - {proofSet.lastProvenEpoch - ? Number(proofSet.lastProvenEpoch).toLocaleString() + {dataSet.lastProvenEpoch + ? Number(dataSet.lastProvenEpoch).toLocaleString() : 'Never'} - {proofSet.nextChallengeEpoch - ? Number(proofSet.nextChallengeEpoch).toLocaleString() + {dataSet.nextChallengeEpoch + ? Number(dataSet.nextChallengeEpoch).toLocaleString() : 'N/A'}