From d4ba3d45e5980638d77ebba9e8d18d2e56892bfe Mon Sep 17 00:00:00 2001 From: defiQUG Date: Mon, 9 Feb 2026 21:51:48 -0800 Subject: [PATCH] Initial commit: add .gitignore and README --- .common.sh | 75 + .gitignore | 49 + .quorumDevQuickstart.lock | 1 + DOCKER_DNS_FIX.md | 108 + METAMASK_SETUP.md | 167 + README.md | 212 + SETUP_COMPLETE.md | 90 + STARTUP_STATUS.md | 72 + URGENT_DOCKER_DNS_FIX.md | 69 + attach.sh | 12 + chainlens/5xx.html | 91 + chainlens/nginx.conf | 21 + config/besu/CLIQUEgenesis.json | 62 + config/besu/IBFTgenesis.json | 92 + config/besu/QBFTgenesis.json | 95 + config/besu/config.toml | 42 + config/besu/log-config-splunk.xml | 46 + config/besu/log-config.xml | 28 + config/besu/permissions_config.toml | 11 + config/besu/static-nodes.json | 11 + config/ethsigner/createKey.js | 8 + config/ethsigner/key | 1 + config/ethsigner/password | 1 + .../grafana/provisioning/dashboards/besu.json | 884 ++ .../provisioning/dashboards/dashboard.yml | 12 + .../grafana/provisioning/dashboards/loki.json | 284 + .../provisioning/dashboards/quorum.json | 2205 ++++ .../grafana/provisioning/datasources/loki.yml | 54 + .../provisioning/datasources/prometheus.yml | 54 + config/kibana/besu_overview_dashboard.ndjson | 8 + config/nodes/member1/accountKeystore | 1 + config/nodes/member1/accountPassword | 0 config/nodes/member1/accountPrivateKey | 1 + config/nodes/member1/address | 1 + config/nodes/member1/nodekey | 1 + config/nodes/member1/nodekey.pub | 1 + config/nodes/member1/tm.key | 1 + config/nodes/member1/tm.pub | 1 + config/nodes/member1/tma.key | 1 + config/nodes/member1/tma.pub | 1 + config/nodes/member2/accountKeystore | 1 + config/nodes/member2/accountPassword | 0 config/nodes/member2/accountPrivateKey | 1 + config/nodes/member2/address | 1 + config/nodes/member2/nodekey | 1 + config/nodes/member2/nodekey.pub | 1 + config/nodes/member2/tm.key | 1 + config/nodes/member2/tm.pub | 1 + config/nodes/member2/tma.key | 1 + config/nodes/member2/tma.pub | 1 + config/nodes/member3/accountKeystore | 1 + config/nodes/member3/accountPassword | 0 config/nodes/member3/accountPrivateKey | 1 + config/nodes/member3/address | 1 + config/nodes/member3/nodekey | 1 + config/nodes/member3/nodekey.pub | 1 + config/nodes/member3/tm.key | 1 + config/nodes/member3/tm.pub | 1 + config/nodes/member3/tma.key | 1 + config/nodes/member3/tma.pub | 1 + config/nodes/rpcnode/accountKeystore | 1 + config/nodes/rpcnode/accountPassword | 0 config/nodes/rpcnode/accountPrivateKey | 1 + config/nodes/rpcnode/address | 1 + config/nodes/rpcnode/nodekey | 1 + config/nodes/rpcnode/nodekey.pub | 1 + config/nodes/validator1/accountKeystore | 1 + config/nodes/validator1/accountPassword | 0 config/nodes/validator1/accountPrivateKey | 1 + config/nodes/validator1/address | 1 + config/nodes/validator1/nodekey | 1 + config/nodes/validator1/nodekey.pub | 1 + config/nodes/validator2/accountKeystore | 1 + config/nodes/validator2/accountPassword | 0 config/nodes/validator2/accountPrivateKey | 1 + config/nodes/validator2/address | 1 + config/nodes/validator2/nodekey | 1 + config/nodes/validator2/nodekey.pub | 1 + config/nodes/validator3/accountKeystore | 1 + config/nodes/validator3/accountPassword | 0 config/nodes/validator3/accountPrivateKey | 1 + config/nodes/validator3/address | 1 + config/nodes/validator3/nodekey | 1 + config/nodes/validator3/nodekey.pub | 1 + config/nodes/validator4/accountKeystore | 1 + config/nodes/validator4/accountPassword | 0 config/nodes/validator4/accountPrivateKey | 1 + config/nodes/validator4/address | 1 + config/nodes/validator4/nodekey | 1 + config/nodes/validator4/nodekey.pub | 1 + config/prometheus/prometheus.yml | 136 + config/tessera/Dockerfile | 15 + config/tessera/data/logback.xml | 33 + .../tessera/data/tessera-config-template.json | 62 + config/tessera/docker-entrypoint.sh | 12 + configure-docker-desktop-dns.md | 51 + dapps/quorumToken/README.md | 74 + dapps/quorumToken/contracts/QuorumToken.sol | 12 + dapps/quorumToken/frontend/.eslintrc.json | 3 + dapps/quorumToken/frontend/next.config.js | 6 + dapps/quorumToken/frontend/package-lock.json | 5612 +++++++++++ dapps/quorumToken/frontend/package.json | 29 + dapps/quorumToken/frontend/public/favicon.svg | 14 + dapps/quorumToken/frontend/public/next.svg | 1 + .../frontend/src/components/Layout.tsx | 27 + .../frontend/src/components/MMAccount.tsx | 25 + .../components/quorumToken/QuorumTokenABI.tsx | 14 + .../quorumToken/ReadQuorumToken.tsx | 88 + .../quorumToken/TransferQuorumToken.tsx | 54 + dapps/quorumToken/frontend/src/pages/_app.tsx | 19 + .../frontend/src/pages/_document.js | 19 + .../quorumToken/frontend/src/pages/index.tsx | 106 + dapps/quorumToken/frontend/styles/globals.css | 21 + dapps/quorumToken/frontend/tsconfig.json | 20 + dapps/quorumToken/hardhat.config.ts | 41 + dapps/quorumToken/package-lock.json | 8901 +++++++++++++++++ dapps/quorumToken/package.json | 34 + .../quorumToken/scripts/deploy_quorumtoken.ts | 15 + dapps/quorumToken/test/QuorumToken.test.ts | 42 + dapps/quorumToken/tsconfig.json | 11 + docker-compose.yml | 327 + docker-desktop-dns-config.json | 4 + extra/generate_node_details.js | 68 + extra/package.json | 13 + filebeat/Dockerfile | 12 + filebeat/filebeat.yml | 66 + fix-dns-now.sh | 53 + fix-docker-dns.sh | 135 + list.sh | 99 + logstash/Dockerfile | 18 + logstash/config/log4j2.properties | 40 + logstash/config/logstash.yml | 13 + logstash/pipeline/10_filebeat_redis.conf | 9 + logstash/pipeline/10_metricbeat_redis.conf | 11 + logstash/pipeline/20_besu.conf | 11 + logstash/pipeline/20_logstash.conf | 11 + logstash/pipeline/20_quorum.conf | 21 + logstash/pipeline/20_tessera.conf | 11 + logstash/pipeline/30_elasticsearch.conf | 44 + loki/loki.yml | 31 + metricbeat/Dockerfile | 11 + metricbeat/metricbeat.yml | 31 + promtail/promtail.yml | 74 + quick-dns-fix.sh | 82 + quorum-explorer/config.json | 60 + quorum-explorer/env | 51 + remove.sh | 53 + restart.sh | 6 + resume.sh | 32 + run.sh | 43 + smart_contracts/contracts/Counter.json | 3404 +++++++ smart_contracts/contracts/Counter.sol | 14 + smart_contracts/contracts/SimpleStorage.json | 6145 ++++++++++++ smart_contracts/contracts/SimpleStorage.sol | 18 + smart_contracts/package.json | 27 + smart_contracts/scripts/compile.js | 62 + smart_contracts/scripts/keys.js | 74 + .../scripts/privacy/concurrent_private_txs.js | 130 + smart_contracts/scripts/privacy/private_tx.js | 200 + .../privacy/private_tx_privacy_group.js | 232 + .../scripts/public/hre_1559_public_tx.js | 88 + smart_contracts/scripts/public/hre_eth_tx.js | 55 + .../scripts/public/hre_public_tx.js | 69 + smart_contracts/scripts/public/web3_eth_tx.js | 52 + splunk/log4j2.xml | 46 + splunk/otel-collector-config.yml | 157 + splunk/splunk.yml | 30 + static/blockchain-network.png | Bin 0 -> 133648 bytes static/metamask-faucet-transfer.png | Bin 0 -> 49079 bytes static/npm-send-private-tx.png | Bin 0 -> 160887 bytes static/qs-dapp.png | Bin 0 -> 72887 bytes stop.sh | 32 + test-docker-dns.sh | 16 + test-rpc-connection.sh | 51 + 174 files changed, 32756 insertions(+) create mode 100755 .common.sh create mode 100644 .gitignore create mode 100644 .quorumDevQuickstart.lock create mode 100644 DOCKER_DNS_FIX.md create mode 100644 METAMASK_SETUP.md create mode 100644 README.md create mode 100644 SETUP_COMPLETE.md create mode 100644 STARTUP_STATUS.md create mode 100644 URGENT_DOCKER_DNS_FIX.md create mode 100755 attach.sh create mode 100644 chainlens/5xx.html create mode 100644 chainlens/nginx.conf create mode 100644 config/besu/CLIQUEgenesis.json create mode 100644 config/besu/IBFTgenesis.json create mode 100644 config/besu/QBFTgenesis.json create mode 100644 config/besu/config.toml create mode 100644 config/besu/log-config-splunk.xml create mode 100644 config/besu/log-config.xml create mode 100644 config/besu/permissions_config.toml create mode 100644 config/besu/static-nodes.json create mode 100644 config/ethsigner/createKey.js create mode 100644 config/ethsigner/key create mode 100644 config/ethsigner/password create mode 100644 config/grafana/provisioning/dashboards/besu.json create mode 100644 config/grafana/provisioning/dashboards/dashboard.yml create mode 100644 config/grafana/provisioning/dashboards/loki.json create mode 100644 config/grafana/provisioning/dashboards/quorum.json create mode 100644 config/grafana/provisioning/datasources/loki.yml create mode 100644 config/grafana/provisioning/datasources/prometheus.yml create mode 100644 config/kibana/besu_overview_dashboard.ndjson create mode 100644 config/nodes/member1/accountKeystore create mode 100644 config/nodes/member1/accountPassword create mode 100644 config/nodes/member1/accountPrivateKey create mode 100644 config/nodes/member1/address create mode 100644 config/nodes/member1/nodekey create mode 100644 config/nodes/member1/nodekey.pub create mode 100644 config/nodes/member1/tm.key create mode 100644 config/nodes/member1/tm.pub create mode 100644 config/nodes/member1/tma.key create mode 100644 config/nodes/member1/tma.pub create mode 100644 config/nodes/member2/accountKeystore create mode 100644 config/nodes/member2/accountPassword create mode 100644 config/nodes/member2/accountPrivateKey create mode 100644 config/nodes/member2/address create mode 100644 config/nodes/member2/nodekey create mode 100644 config/nodes/member2/nodekey.pub create mode 100644 config/nodes/member2/tm.key create mode 100644 config/nodes/member2/tm.pub create mode 100644 config/nodes/member2/tma.key create mode 100644 config/nodes/member2/tma.pub create mode 100644 config/nodes/member3/accountKeystore create mode 100644 config/nodes/member3/accountPassword create mode 100644 config/nodes/member3/accountPrivateKey create mode 100644 config/nodes/member3/address create mode 100644 config/nodes/member3/nodekey create mode 100644 config/nodes/member3/nodekey.pub create mode 100644 config/nodes/member3/tm.key create mode 100644 config/nodes/member3/tm.pub create mode 100644 config/nodes/member3/tma.key create mode 100644 config/nodes/member3/tma.pub create mode 100644 config/nodes/rpcnode/accountKeystore create mode 100644 config/nodes/rpcnode/accountPassword create mode 100644 config/nodes/rpcnode/accountPrivateKey create mode 100644 config/nodes/rpcnode/address create mode 100644 config/nodes/rpcnode/nodekey create mode 100644 config/nodes/rpcnode/nodekey.pub create mode 100644 config/nodes/validator1/accountKeystore create mode 100644 config/nodes/validator1/accountPassword create mode 100644 config/nodes/validator1/accountPrivateKey create mode 100644 config/nodes/validator1/address create mode 100644 config/nodes/validator1/nodekey create mode 100644 config/nodes/validator1/nodekey.pub create mode 100644 config/nodes/validator2/accountKeystore create mode 100644 config/nodes/validator2/accountPassword create mode 100644 config/nodes/validator2/accountPrivateKey create mode 100644 config/nodes/validator2/address create mode 100644 config/nodes/validator2/nodekey create mode 100644 config/nodes/validator2/nodekey.pub create mode 100644 config/nodes/validator3/accountKeystore create mode 100644 config/nodes/validator3/accountPassword create mode 100644 config/nodes/validator3/accountPrivateKey create mode 100644 config/nodes/validator3/address create mode 100644 config/nodes/validator3/nodekey create mode 100644 config/nodes/validator3/nodekey.pub create mode 100644 config/nodes/validator4/accountKeystore create mode 100644 config/nodes/validator4/accountPassword create mode 100644 config/nodes/validator4/accountPrivateKey create mode 100644 config/nodes/validator4/address create mode 100644 config/nodes/validator4/nodekey create mode 100644 config/nodes/validator4/nodekey.pub create mode 100644 config/prometheus/prometheus.yml create mode 100644 config/tessera/Dockerfile create mode 100644 config/tessera/data/logback.xml create mode 100644 config/tessera/data/tessera-config-template.json create mode 100755 config/tessera/docker-entrypoint.sh create mode 100644 configure-docker-desktop-dns.md create mode 100644 dapps/quorumToken/README.md create mode 100644 dapps/quorumToken/contracts/QuorumToken.sol create mode 100644 dapps/quorumToken/frontend/.eslintrc.json create mode 100644 dapps/quorumToken/frontend/next.config.js create mode 100644 dapps/quorumToken/frontend/package-lock.json create mode 100644 dapps/quorumToken/frontend/package.json create mode 100644 dapps/quorumToken/frontend/public/favicon.svg create mode 100644 dapps/quorumToken/frontend/public/next.svg create mode 100644 dapps/quorumToken/frontend/src/components/Layout.tsx create mode 100644 dapps/quorumToken/frontend/src/components/MMAccount.tsx create mode 100644 dapps/quorumToken/frontend/src/components/quorumToken/QuorumTokenABI.tsx create mode 100644 dapps/quorumToken/frontend/src/components/quorumToken/ReadQuorumToken.tsx create mode 100644 dapps/quorumToken/frontend/src/components/quorumToken/TransferQuorumToken.tsx create mode 100644 dapps/quorumToken/frontend/src/pages/_app.tsx create mode 100644 dapps/quorumToken/frontend/src/pages/_document.js create mode 100644 dapps/quorumToken/frontend/src/pages/index.tsx create mode 100644 dapps/quorumToken/frontend/styles/globals.css create mode 100644 dapps/quorumToken/frontend/tsconfig.json create mode 100644 dapps/quorumToken/hardhat.config.ts create mode 100644 dapps/quorumToken/package-lock.json create mode 100644 dapps/quorumToken/package.json create mode 100644 dapps/quorumToken/scripts/deploy_quorumtoken.ts create mode 100644 dapps/quorumToken/test/QuorumToken.test.ts create mode 100644 dapps/quorumToken/tsconfig.json create mode 100644 docker-compose.yml create mode 100644 docker-desktop-dns-config.json create mode 100644 extra/generate_node_details.js create mode 100644 extra/package.json create mode 100644 filebeat/Dockerfile create mode 100644 filebeat/filebeat.yml create mode 100755 fix-dns-now.sh create mode 100755 fix-docker-dns.sh create mode 100755 list.sh create mode 100644 logstash/Dockerfile create mode 100644 logstash/config/log4j2.properties create mode 100644 logstash/config/logstash.yml create mode 100644 logstash/pipeline/10_filebeat_redis.conf create mode 100644 logstash/pipeline/10_metricbeat_redis.conf create mode 100644 logstash/pipeline/20_besu.conf create mode 100644 logstash/pipeline/20_logstash.conf create mode 100644 logstash/pipeline/20_quorum.conf create mode 100644 logstash/pipeline/20_tessera.conf create mode 100644 logstash/pipeline/30_elasticsearch.conf create mode 100644 loki/loki.yml create mode 100644 metricbeat/Dockerfile create mode 100644 metricbeat/metricbeat.yml create mode 100644 promtail/promtail.yml create mode 100755 quick-dns-fix.sh create mode 100644 quorum-explorer/config.json create mode 100644 quorum-explorer/env create mode 100755 remove.sh create mode 100755 restart.sh create mode 100755 resume.sh create mode 100755 run.sh create mode 100644 smart_contracts/contracts/Counter.json create mode 100644 smart_contracts/contracts/Counter.sol create mode 100644 smart_contracts/contracts/SimpleStorage.json create mode 100644 smart_contracts/contracts/SimpleStorage.sol create mode 100644 smart_contracts/package.json create mode 100644 smart_contracts/scripts/compile.js create mode 100644 smart_contracts/scripts/keys.js create mode 100644 smart_contracts/scripts/privacy/concurrent_private_txs.js create mode 100644 smart_contracts/scripts/privacy/private_tx.js create mode 100644 smart_contracts/scripts/privacy/private_tx_privacy_group.js create mode 100644 smart_contracts/scripts/public/hre_1559_public_tx.js create mode 100644 smart_contracts/scripts/public/hre_eth_tx.js create mode 100644 smart_contracts/scripts/public/hre_public_tx.js create mode 100644 smart_contracts/scripts/public/web3_eth_tx.js create mode 100644 splunk/log4j2.xml create mode 100644 splunk/otel-collector-config.yml create mode 100644 splunk/splunk.yml create mode 100644 static/blockchain-network.png create mode 100644 static/metamask-faucet-transfer.png create mode 100644 static/npm-send-private-tx.png create mode 100644 static/qs-dapp.png create mode 100755 stop.sh create mode 100755 test-docker-dns.sh create mode 100755 test-rpc-connection.sh diff --git a/.common.sh b/.common.sh new file mode 100755 index 0000000..7781239 --- /dev/null +++ b/.common.sh @@ -0,0 +1,75 @@ +#!/bin/sh + +me=`basename "$0"` + +if [ "$me" = ".common.sh" ];then + echo >&2 "This script is not expected to be run separately." + exit 1 +fi + +bold=$(tput bold) +normal=$(tput sgr0) + +hash docker 2>/dev/null || { + echo >&2 "This script requires Docker but it's not installed." + echo >&2 "Refer to documentation to fulfill requirements." + exit 1 +} + +docker compose version &>/dev/null +if [ "$?" -eq "1" ];then + echo >&2 "This script requires Docker compose but it's not installed." + echo >&2 "Refer to documentation to fulfill requirements." + exit 1 +fi + +docker info &>/dev/null +if [ "$?" -eq "1" ];then + echo >&2 "This script requires Docker daemon to run. Start Docker and try again." + echo >&2 "Refer to documentation to fulfill requirements." + exit 1 +fi + +# We use "SI" measures here because the measurement in the UI and actual bytes +# do not align exactly +PRIVACY_MINIMUM=$(( 6 * 1000 * 1000 * 1000 )) +NORMAL_MINIMUM=$(( 4 * 1000 * 1000 * 1000 )) +dockermem=$(docker info --format '{{.MemTotal}}') + +case "$me" in + *privacy* ) + if [ $dockermem -lt $PRIVACY_MINIMUM ]; then + echo >&2 "This script requires that docker has at least 6GB of memory available."; + echo >&2 "Refer to documentation to fulfill requirements." + exit 1 + fi; + ;; + * ) + if [ $dockermem -lt $NORMAL_MINIMUM ]; then + echo >&2 "This script requires that docker has at least 4GB of memory available." + echo >&2 "Refer to documentation to fulfill requirements." + exit 1 + fi + ;; +esac + +if [ "${NO_LOCK_REQUIRED}" = "true" ];then + if [ -f ${LOCK_FILE} ];then + echo "Network already in use (${LOCK_FILE} present)." >&2 + echo "Restart with ./resume.sh or remove with ./remove.sh before running again." >&2 + exit 1 + fi +else + composeFile="" + if [ -f ${LOCK_FILE} ]; then + #read the first line of the lock file and store the value as it's the compose file option + composeFile=`sed '1q;d' ${LOCK_FILE}` + else + echo "Network is not running (${LOCK_FILE} not present)." >&2 + echo "Run it with ./run.sh first" >&2 + exit 1 + fi +fi + +current_dir=${PWD##*/} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c64e16 --- /dev/null +++ b/.gitignore @@ -0,0 +1,49 @@ +# Dependencies +node_modules/ +.pnpm-store/ +vendor/ + +# Package manager lock files (optional: uncomment to ignore) +# package-lock.json +# yarn.lock + +# Environment and secrets +.env +.env.local +.env.*.local +*.env.backup +.env.backup.* + +# Logs and temp +*.log +logs/ +*.tmp +*.temp +*.tmp.* + +# OS +.DS_Store +Thumbs.db + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Build / output +dist/ +build/ +.next/ +out/ +*.pyc +__pycache__/ +.eggs/ +*.egg-info/ +.coverage +htmlcov/ + +# Optional +.reports/ +reports/ diff --git a/.quorumDevQuickstart.lock b/.quorumDevQuickstart.lock new file mode 100644 index 0000000..1120be9 --- /dev/null +++ b/.quorumDevQuickstart.lock @@ -0,0 +1 @@ +docker-compose.yml diff --git a/DOCKER_DNS_FIX.md b/DOCKER_DNS_FIX.md new file mode 100644 index 0000000..4b7216f --- /dev/null +++ b/DOCKER_DNS_FIX.md @@ -0,0 +1,108 @@ +# Docker DNS Fix for WSL2 + +## Problem +Docker is failing to pull images with the error: +``` +Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on 10.0.2.3:53: read udp 10.0.2.100:32836->10.0.2.3:53: i/o timeout +``` + +This is a DNS resolution issue in WSL2. + +## Quick Fix (Try This First) + +### Option 1: Quick Script +```bash +./quick-dns-fix.sh +``` + +### Option 2: Manual DNS Fix +```bash +# Fix WSL2 DNS (requires sudo) +sudo bash -c 'cat > /etc/resolv.conf < /etc/wsl.conf <8545/tcp` are accessible from Windows. + +## Available RPC Endpoints + +### Primary Endpoints (Recommended for MetaMask): + +1. **JSON-RPC HTTP**: `http://localhost:8545` + - This is the main RPC endpoint (rpcnode) + - **Use this for MetaMask** + +2. **EthSigner Proxy**: `http://localhost:18545` + - Alternative endpoint with transaction signing + - Can also be used with MetaMask + +### Validator Endpoints (Optional): +- Validator 1: `http://localhost:21001` +- Validator 2: `http://localhost:21002` +- Validator 3: `http://localhost:21003` +- Validator 4: `http://localhost:21004` + +## Setting Up MetaMask + +### Step 1: Add Custom Network + +1. Open MetaMask in your browser +2. Click the network dropdown (top of MetaMask) +3. Click "Add Network" or "Add a network manually" + +### Step 2: Enter Network Details + +Fill in the following information: + +``` +Network Name: Quorum Test Network +New RPC URL: http://localhost:8545 +Chain ID: 1337 +Currency Symbol: ETH +Block Explorer URL: http://localhost:25000/explorer/nodes +``` + +**Important Fields:** +- **RPC URL**: `http://localhost:8545` (or `http://localhost:18545` for EthSigner) +- **Chain ID**: `1337` (as configured in your network) +- **Currency Symbol**: `ETH` (or any name you prefer) +- **Block Explorer**: `http://localhost:25000/explorer/nodes` (Quorum Explorer) + +### Step 3: Save and Connect + +1. Click "Save" +2. MetaMask will switch to your Quorum network +3. You should see the network name in the dropdown + +## Testing the Connection + +### From Windows Browser/Command Prompt: + +1. **Test RPC Endpoint** (from Windows PowerShell or CMD): + ```powershell + curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://localhost:8545 + ``` + +2. **Or use a browser**: + - Open: http://localhost:25000/explorer/nodes (Quorum Explorer) + - Open: http://localhost:26000 (Blockscout) + - Open: http://localhost:3000 (Grafana) + +### From WSL2: + +```bash +# Test RPC endpoint +curl -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + http://localhost:8545 + +# Should return something like: +# {"jsonrpc":"2.0","id":1,"result":"0x..."} +``` + +## Troubleshooting + +### If MetaMask Can't Connect: + +1. **Verify RPC is Running**: + ```bash + # In WSL2 + docker compose ps | grep rpcnode + ``` + +2. **Check Port Binding**: + ```bash + # In WSL2 + docker ps | grep 8545 + ``` + Should show: `0.0.0.0:8545->8545/tcp` + +3. **Test from Windows**: + - Open Windows PowerShell + - Run: `Test-NetConnection -ComputerName localhost -Port 8545` + - Should show `TcpTestSucceeded : True` + +4. **Windows Firewall** (if needed): + - Windows Firewall should allow localhost connections by default + - If blocked, add exception for port 8545 + - Or temporarily disable firewall to test + +5. **WSL2 Port Forwarding**: + - WSL2 should forward ports automatically + - If not working, restart WSL: `wsl --shutdown` (from Windows PowerShell) + +### Alternative: Use WSL2 IP Address + +If `localhost` doesn't work, you can use the WSL2 IP address: + +1. **Find WSL2 IP** (from WSL2): + ```bash + hostname -I + # Example output: 192.168.0.3 + ``` + +2. **Use in MetaMask**: + - RPC URL: `http://192.168.0.3:8545` + - Replace `192.168.0.3` with your actual WSL2 IP + +3. **Note**: This IP may change when WSL2 restarts + +## Network Information + +- **Chain ID**: 1337 +- **Network Name**: Quorum Dev Quickstart +- **Consensus**: QBFT (Quorum Byzantine Fault Tolerance) +- **Genesis Block**: Pre-configured with validators + +## Getting Test ETH + +Since this is a local test network, you'll need to: + +1. **Import a Pre-funded Account**: + - The network has pre-configured accounts with ETH + - Check the `config/nodes/` directory for account files + - Import the private key into MetaMask + +2. **Or Mine/Generate ETH**: + - Validators are already running + - You can create new accounts in MetaMask + - Use the network's faucet or transfer from validator accounts + +## Additional Resources + +- **Quorum Explorer**: http://localhost:25000/explorer/nodes +- **Blockscout**: http://localhost:26000 +- **Grafana Dashboard**: http://localhost:3000 +- **Prometheus Metrics**: http://localhost:9090 + +## Security Note + +⚠️ **This is a test network** - Never use real private keys or real ETH on this network. It's only for development and testing purposes. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..3d3a535 --- /dev/null +++ b/README.md @@ -0,0 +1,212 @@ +# Quorum Dev Quickstart + +## Table of Contents + +- [Quorum Dev Quickstart](#quorum-dev-quickstart) + - [Table of Contents](#table-of-contents) + - [Prerequisites](#prerequisites) + - [Usage](#usage) + - [Dev Network Setups](#dev-network-setups) + - [i. POA Network ](#i-poa-network-) + - [ii. POA Network with Privacy ](#ii-poa-network-with-privacy-) + - [iii. Smart Contracts \& DApps ](#iii-smart-contracts--dapps-) + - [Moving to production](#moving-to-production) + +## Prerequisites + +To run these tutorials, you must have the following installed: + +- [Docker and Docker-compose](https://docs.docker.com/compose/install/) v2 or higher + +| ⚠️ **Note**: If on MacOS or Windows, please ensure that you allow docker to use upto 4G of memory or 6G if running Privacy examples under the _Resources_ section. The [Docker for Mac](https://docs.docker.com/docker-for-mac/) and [Docker Desktop](https://docs.docker.com/docker-for-windows/) sites have details on how to do this at the "Resources" heading | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | + +| ⚠️ **Note**: This has only been tested on Windows 10 Build 18362 and Docker >= 17.12.2 | +| -------------------------------------------------------------------------------------- | + +- On Windows ensure that the drive that this repo is cloned onto is a "Shared Drive" with Docker Desktop +- On Windows we recommend running all commands from GitBash +- [Nodejs](https://nodejs.org/en/download/) or [Yarn](https://yarnpkg.com/cli/node) + +## Usage + +Change directory to the artifacts folder: + +`cd quorum-test-network` (default folder location) + +**To start services and the network:** + +`./run.sh` starts all the docker containers + +**To stop services :** + +`./stop.sh` stops the entire network, and you can resume where it left off with `./resume.sh` + +`./remove.sh ` will first stop and then remove all containers and images + +## Dev Network Setups + +All our documentation can be found on the [Besu documentation site](https://besu.hyperledger.org/Tutorials/Examples/Private-Network-Example/). + +Each quickstart setup is comprised of 4 validators, one RPC node and some monitoring tools like: + +- [Alethio Lite Explorer](https://besu.hyperledger.org/en/stable/HowTo/Deploy/Lite-Block-Explorer/) to explore blockchain data at the block, transaction, and account level +- [Metrics monitoring](https://besu.hyperledger.org/en/stable/HowTo/Monitor/Metrics/) via Prometheus and Grafana to give you insights into how the chain is progressing (only with Besu based Quorum) +- Optional [logs monitoring](https://besu.hyperledger.org/en/latest/HowTo/Monitor/Elastic-Stack/) to give you real time logs of the nodes. This feature is enabled with a `-e` flag when starting the sample network + +The overall architecture diagrams to visually show components of the blockchain networks is shown below. +**Consensus Algorithm**: The Besu based Quorum variant uses the `IBFT2` consensus mechanism. +**Private TX Manager**: Both blockchain clients use [Tessera](https://docs.tessera.consensys.net/en/latest/) + +![Image blockchain](./static/blockchain-network.png) + +### i. POA Network + +This is the simplest of the networks available and will spin up a blockchain network comprising 4 validators, 1 RPC +node which has an [EthSigner](http://docs.ethsigner.consensys.net/) proxy container linked to it so you can optionally sign transactions. To view the progress +of the network, the Quorum block explorer can be used and is available on `http://localhost:25000`. +Hyperledger Besu based Quorum also deploys monitoring solutions. +You can choose to make metrics monitoring via Prometheus available on `http://localhost:9090`, +paired with Grafana with custom dashboards available on `http://localhost:3000`. +You can also use Splunk to see all logs, traces and metrics available at `http://localhost:8000` (with the credentials admin/quickstart). + +Essentially you get everything in the architecture diagram above, bar the yellow privacy block + +Use cases: + +- you are learning about how Ethereum works +- you are looking to create a Mainnet or Ropsten node but want to see how it works on a smaller scale +- you are a DApp Developer looking for a robust, simple network to use as an experimental testing ground for POCs. + +### ii. POA Network with Privacy + +This network is slightly more advanced than the former and you get everything from the POA network above and a few +Ethereum clients each paired with [Tessera](https://docs.tessera.consensys.net/en/latest/) for its Private Transaction Mananger. + +As before, to view the progress of the network, the Quorum block explorer can be used and is available on `http://localhost:25000`. +Hyperledger Besu based Quorum also deploys monitoring solutions. +You can choose to make metrics monitoring via Prometheus available on `http://localhost:9090`, +paired with Grafana with custom dashboards available on `http://localhost:3000`. +You can also use Splunk to see all logs, traces and metrics available at `http://localhost:8000` (with the credentials admin/quickstart). + +Essentially you get everything in the architecture diagram above. + +Use cases: + +- you are learning about how Ethereum works +- you are a user looking to execute private transactions at least one other party +- you are looking to create a private Ethereum network with private transactions between two or more parties. + +Once the network is up and running you can make public transactions on the chain and interact with the smart contract at its deployed address, +and you can also make private transaction between members and verify that other nodes do not see it. +Under the smart_contracts folder there is a `SimpleStorage` contract which we use for both as an example. The `SimpleStorage` contract will store a value and emit an event with that stored value, you can either observe the events or call the `get` function on the contract to get the value. + +For the public transaction: + +``` +cd smart_contracts +npm install +node scripts/public/public_tx.js +``` + +which creates an account and then deploys the contract with the account's address. It also initializes the default constructor +with a value (47). Once done, it will call the `get` function on the contract to check the value at the address, and +you should see it return the value. Then it will call the `set` function on the contract and update the value (123) +and then verify the address to make sure its been updated. It will then call `getPastEvents("allEvents", { fromBlock: 0, toBlock: 'latest' })` to fetch all the historical events for that contract, this confirm that events have been emited for both the constructor and the set. + +``` +node scripts/public/public_tx.js +{ + address: '0x36781cB22798149d47c55A228f186F583fA9F64b', + privateKey: '0x6ee9f728b2e4c092243427215ecd12e53b9c0e388388dc899b1438c487c02b61', + signTransaction: [Function: signTransaction], + sign: [Function: sign], + encrypt: [Function: encrypt] +} +Creating transaction... +Signing transaction... +Sending transaction... +tx transactionHash: 0xaf86a44b2a477fbc4a7c9f71eace0753ac1ffc4c446aa779dbb8682bf765e8b9 +tx contractAddress: 0xE12f1232aE87862f919efb7Df27DC819F0240F07 +Contract deployed at address: 0xE12f1232aE87862f919efb7Df27DC819F0240F07 +Use the smart contracts 'get' function to read the contract's constructor initialized value .. +Obtained value at deployed contract is: 47 +Use the smart contracts 'set' function to update that value to 123 .. +Verify the updated value that was set .. +Obtained value at deployed contract is: 123 +Obtained all value events from deployed contract : [47,123] +``` + +For the private transaction: + +``` +cd smart_contracts +npm install +node scripts/privacy/private_tx.js +``` + +which deploys the contract and sends an arbitrary value (47) from `Member1` to `Member3`. Once done, it queries all three members (tessera) +to check the value at an address, and you should observe that only `Member1` & `Member3` have this information as they were involved in the transaction +and that `Member2` responds with a `0x` to indicate it is unaware of the transaction. + +``` +node scripts/privacy/private_tx.js +Creating contract... +Getting contractAddress from txHash: 0xc1b57f6a7773fe887afb141a09a573d19cb0fdbb15e0f2b9ed0dfead6f5b5dbf +Waiting for transaction to be mined ... +Address of transaction: 0x8220ca987f7bb7f99815d0ef64e1d8a072a2c167 +Use the smart contracts 'get' function to read the contract's constructor initialized value .. +Waiting for transaction to be mined ... +Member1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000002f +Use the smart contracts 'set' function to update that value to 123 .. - from member1 to member3 +Transaction hash: 0x387c6627fe87e235b0f2bbbe1b2003a11b54afc737dca8da4990d3de3197ac5f +Waiting for transaction to be mined ... +Verify the private transaction is private by reading the value from all three members .. +Waiting for transaction to be mined ... +Member1 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b +Waiting for transaction to be mined ... +Member2 value from deployed contract is: 0x +Waiting for transaction to be mined ... +Member3 value from deployed contract is: 0x000000000000000000000000000000000000000000000000000000000000007b +``` + +Further [documentation](https://besu.hyperledger.org/en/stable/Tutorials/Privacy/eeajs-Multinode-example/) for this example and a [video tutorial](https://www.youtube.com/watch?v=Menekt6-TEQ) +is also available. + +There is an additional erc20 token example that you can also test with: executing `node example/erc20.js` deploys a `HumanStandardToken` contract and transfers 1 token to Node2. + +This can be verified from the `data` field of the `logs` which is `1`. + +### iii. Smart Contracts & DApps + +As an example we've included the Truffle Pet-Shop Dapp in the `dapps` folder and here is a [video tutorial](https://www.youtube.com/watch?v=_3E9FRJldj8) you +can follow of deployment to the network and using it. Please import the private key `0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3` to +Metmask **before** proceeding to build and run the DApp with `run-dapp.sh`. Behind the scenes, this has used a smart contract that is compiled and then +deployed (via a migration) to our test network. The source code for the smart contract and the DApp can be found in the folder `dapps/pet-shop` + +| ⚠️ **WARNING**: | +| --- +This is a test account only and the private and public keys are publicly visible. **Using test accounts on Ethereum mainnet and production networks can lead to loss of funds and identity fraud.** In this documentation, we only provide test accounts for ease of testing and learning purposes; never use them for other purposes. **Always secure your Ethereum mainnet and any production account properly.** See for instance [MyCrypto "Protecting Yourself and Your Funds" guide](https://support.mycrypto.com/staying-safe/protecting-yourself-and-your-funds). | + +![Image dapp](./static/qs-dapp.png) + +As seen in the architecture overview diagram you can extend the network with monitoring, logging, smart contracts, DApps and so on + +- Once you have a network up and running from above, install [metamask](https://metamask.io/) as an extension in your browser +- Once you have setup your own private account, select 'My Accounts' by clicking on the avatar pic and then 'Import Account' and enter the private key `0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3` +- Build the DApp container and deploy by + +``` +cd dapps/pet-shop +./run_dapp.sh +``` + +When that completes open a new tab in your browser and go to `http://localhost:3001` which opens the Truffle pet-shop box app +and you can adopt a pet from there. NOTE: Once you have adopted a pet, you can also go to the block explorer `http://localhost:25000` +and search for the transaction where you can see its details recorded. Metamask will also have a record of any transactions. + +## Moving to production + +When you are ready to move to production, please create new keys for your nodes using the +[Quorum Genesis Tool](https://www.npmjs.com/package/quorum-genesis-tool) and read through the the +[Besu documentation](https://besu.hyperledger.org/en/latest/HowTo/Deploy/Cloud/) diff --git a/SETUP_COMPLETE.md b/SETUP_COMPLETE.md new file mode 100644 index 0000000..b798c4a --- /dev/null +++ b/SETUP_COMPLETE.md @@ -0,0 +1,90 @@ +# Quorum Network Setup - DNS Fix Complete + +## ✅ Completed Steps + +### 1. DNS Configuration Fixed +- ✅ Updated `/etc/resolv.conf` with reliable DNS servers (8.8.8.8, 8.8.4.4, 1.1.1.1) +- ✅ Created `/etc/wsl.conf` to prevent WSL from overwriting DNS settings +- ✅ DNS fix script created: `fix-dns-now.sh` + +### 2. Docker Connectivity Verified +- ✅ Docker is running (version 29.0.2) +- ✅ Docker Compose is working (version v2.40.3) +- ✅ Docker can now pull images (DNS resolution working) + +### 3. Network Startup Initiated +- ✅ Lock file removed +- ✅ Docker Compose configuration validated +- ✅ Image pulling started successfully + +## 📋 Next Steps + +### To Start the Network: + +1. **Pull all required images** (this may take a few minutes): + ```bash + cd /home/intlc/projects/quorum-test-network + docker compose pull + ``` + +2. **Start the network**: + ```bash + ./run.sh + ``` + + Or manually: + ```bash + docker compose up --detach + ``` + +3. **Check network status**: + ```bash + docker compose ps + ./list.sh # List endpoints and services + ``` + +### If You Still Encounter DNS Issues: + +1. **Configure Docker Desktop DNS** (if using Docker Desktop): + - Open Docker Desktop + - Settings → Docker Engine + - Add: `"dns": ["8.8.8.8", "8.8.4.4", "1.1.1.1"]` + - Apply & Restart + +2. **Restart WSL** (from Windows PowerShell): + ```powershell + wsl --shutdown + ``` + Then restart your WSL terminal. + +## 📁 Files Created + +- `fix-dns-now.sh` - Quick DNS fix script +- `quick-dns-fix.sh` - Comprehensive DNS fix script +- `fix-docker-dns.sh` - Full DNS and Docker daemon configuration +- `DOCKER_DNS_FIX.md` - Complete DNS troubleshooting guide +- `configure-docker-desktop-dns.md` - Docker Desktop DNS configuration guide +- `SETUP_COMPLETE.md` - This file + +## 🔍 Network Services + +The Quorum network includes: +- **Validators**: validator1, validator2, validator3, validator4 +- **RPC Node**: rpcnode +- **EthSigner Proxy**: ethsignerProxy +- **Explorer**: Quorum Explorer +- **Blockscout**: Block explorer +- **Monitoring**: Prometheus, Grafana, Loki, Promtail + +## 🌐 Endpoints (After Startup) + +- JSON-RPC HTTP: http://localhost:8545 +- JSON-RPC WebSocket: ws://localhost:8546 +- Web Block Explorer: http://localhost:25000/explorer/nodes +- Grafana: http://localhost:3000 +- Prometheus: http://localhost:9090 + +## ⚠️ Note + +The `version` attribute in `docker-compose.yml` is obsolete. You can remove it to eliminate the warning, but it won't affect functionality. + diff --git a/STARTUP_STATUS.md b/STARTUP_STATUS.md new file mode 100644 index 0000000..5061cc2 --- /dev/null +++ b/STARTUP_STATUS.md @@ -0,0 +1,72 @@ +# Quorum Network Startup Status + +## ✅ Completed Steps + +1. **DNS Configuration Fixed** + - ✅ WSL2 DNS updated with reliable servers (8.8.8.8, 8.8.4.4, 1.1.1.1) + - ✅ DNS configuration added to all Docker Compose services + - ✅ Docker can now pull images successfully + +2. **Docker Compose Configuration** + - ✅ Removed obsolete `version` attribute + - ✅ Added DNS servers to all 13 services + - ✅ Configuration validated + +3. **Image Pulling** + - ✅ Images are being pulled successfully + - ✅ 8+ required images available locally + +## 🚀 Starting the Network + +The network startup process has been initiated. To check status: + +```bash +# Check container status +docker compose ps + +# View logs +docker compose logs + +# List endpoints +./list.sh +``` + +## 📋 Services in the Network + +- **Validators**: validator1, validator2, validator3, validator4 +- **RPC Node**: rpcnode +- **EthSigner Proxy**: ethsignerProxy +- **Explorer**: Quorum Explorer +- **Blockscout**: Block explorer with PostgreSQL +- **Monitoring**: Prometheus, Grafana, Loki, Promtail + +## 🌐 Expected Endpoints + +Once all containers are running: +- JSON-RPC HTTP: http://localhost:8545 +- JSON-RPC WebSocket: ws://localhost:8546 +- Web Block Explorer: http://localhost:25000/explorer/nodes +- Grafana: http://localhost:3000 +- Prometheus: http://localhost:9090 + +## ⚠️ Important Notes + +1. **DNS Configuration**: All services now have explicit DNS servers configured in docker-compose.yml +2. **Docker Desktop**: If you're using Docker Desktop, you may still want to configure DNS in Docker Desktop settings for better performance (see `URGENT_DOCKER_DNS_FIX.md`) +3. **Startup Time**: The network may take 1-2 minutes to fully start all services + +## 🔧 Troubleshooting + +If containers don't start: +```bash +# Check logs +docker compose logs [service-name] + +# Restart services +docker compose restart + +# Remove and recreate +docker compose down +docker compose up --detach +``` + diff --git a/URGENT_DOCKER_DNS_FIX.md b/URGENT_DOCKER_DNS_FIX.md new file mode 100644 index 0000000..806e99a --- /dev/null +++ b/URGENT_DOCKER_DNS_FIX.md @@ -0,0 +1,69 @@ +# ⚠️ URGENT: Docker Desktop DNS Configuration Required + +## Problem +Docker Desktop is still using the old DNS server (10.0.2.3) which is timing out. The WSL2 DNS fix we applied helps the host, but **Docker Desktop runs in its own VM and needs separate DNS configuration**. + +## Solution: Configure Docker Desktop DNS + +### Step 1: Open Docker Desktop +1. Look for the Docker Desktop icon in your Windows system tray (bottom right) +2. Right-click and select "Settings" or open Docker Desktop + +### Step 2: Navigate to Docker Engine Settings +1. In Docker Desktop, click the **Settings** (⚙️) icon in the top right +2. In the left sidebar, click **"Docker Engine"** + +### Step 3: Add DNS Configuration +1. You'll see a JSON configuration editor +2. **Add or update** the `dns` field in the JSON: + +**If the JSON is empty or minimal:** +```json +{ + "dns": ["8.8.8.8", "8.8.4.4", "1.1.1.1"] +} +``` + +**If there's already content, add the dns line:** +```json +{ + "builder": { + "gc": { + "enabled": true + } + }, + "dns": ["8.8.8.8", "8.8.4.4", "1.1.1.1"], + "experimental": false +} +``` + +### Step 4: Apply and Restart +1. Click **"Apply & Restart"** button +2. Wait for Docker Desktop to restart (this takes 30-60 seconds) + +### Step 5: Verify +After Docker Desktop restarts, test in WSL2: +```bash +cd /home/intlc/projects/quorum-test-network +docker pull alpine:latest +``` + +If this works, the DNS is fixed! + +## Alternative: Restart WSL +If you can't access Docker Desktop settings right now: +1. From Windows PowerShell (as Administrator): + ```powershell + wsl --shutdown + ``` +2. Restart your WSL terminal +3. Try the network again + +## Quick Reference +- **Docker Desktop Settings Location**: Settings → Docker Engine +- **DNS Servers to Add**: `["8.8.8.8", "8.8.4.4", "1.1.1.1"]` +- **After Configuration**: Click "Apply & Restart" + +## Why This is Needed +Docker Desktop runs in a separate VM from WSL2. The DNS configuration we applied to WSL2 doesn't automatically apply to Docker Desktop's VM. Docker Desktop needs its own DNS configuration. + diff --git a/attach.sh b/attach.sh new file mode 100755 index 0000000..c095a9e --- /dev/null +++ b/attach.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +MEMBER_NUMBER=$1 +MEMBER_NODE="member${MEMBER_NUMBER}quorum" +echo "Attempting to connect to $MEMBER_NODE" +if [ -z `docker compose -f docker-compose.yml ps -q ${MEMBER_NODE} 2>/dev/null` ] ; then + echo "$MEMBER_NUMBER is not a valid member node. Must be between 1 and 3" >&2 + exit 1 +fi + +# can also do geth attach http://localhost:8545 +docker compose exec ${MEMBER_NODE} /bin/sh -c "geth attach /data/geth.ipc" diff --git a/chainlens/5xx.html b/chainlens/5xx.html new file mode 100644 index 0000000..12d738d --- /dev/null +++ b/chainlens/5xx.html @@ -0,0 +1,91 @@ + + + + + Chainlens | Blockchain Explorer + + + + + + + +
+
+
+ + + +
+
+
+

Your environment is being created

+

Give us a few minutes

+ + Chainlens — web3labs.com + +
+
+ + diff --git a/chainlens/nginx.conf b/chainlens/nginx.conf new file mode 100644 index 0000000..5b2f06b --- /dev/null +++ b/chainlens/nginx.conf @@ -0,0 +1,21 @@ +events { } + +http { + server { + listen 80; + charset utf-8; + + location /api/ { + proxy_pass http://chainlensapi:8090/; + } + + location / { + proxy_pass http://chainlensweb:3000/; + } + + error_page 500 502 503 504 /5xx.html; + location /5xx.html { + root /www/error_pages/; + } + } +} diff --git a/config/besu/CLIQUEgenesis.json b/config/besu/CLIQUEgenesis.json new file mode 100644 index 0000000..8d27c97 --- /dev/null +++ b/config/besu/CLIQUEgenesis.json @@ -0,0 +1,62 @@ +{ + "config":{ + "chainId":1337, + "londonBlock": 0, + "zeroBaseFee": true, + "clique":{ + "blockperiodseconds":15, + "epochlength":30000 + } + }, + "coinbase":"0x0000000000000000000000000000000000000000", + "difficulty":"0x1", + "extraData":"0x000000000000000000000000000000000000000000000000000000000000000093917cadbace5dfce132b991732c6cda9bcc5b8a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "gasLimit":"0xa00000", + "mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce":"0x0", + "timestamp":"0x5c51a607", + "alloc": { + "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73": { + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance": "0x130EE8E7179044400000" + }, + "0x627306090abaB3A6e1400e9345bC60c78a8BEf57": { + "privateKey": "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3", + "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance": "90000000000000000000000" + }, + "0xf17f52151EbEF6C7334FAD080c5704D77216b732": { + "privateKey": "0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f", + "comment": "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance": "90000000000000000000000" + }, + "0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5": { + "balance": "1000000000000000000000000000" + }, + "0xca843569e3427144cead5e4d5999a3d0ccf92b8e": { + "balance": "1000000000000000000000000000" + }, + "0x0fbdc686b912d7722dc86510934589e0aaf3b55a": { + "balance": "1000000000000000000000000000" + }, + "0xc9c913c8c3c1cd416d80a0abf475db2062f161f6": { + "balance": "1000000000000000000000000000" + }, + "0xed9d02e382b34818e88b88a309c7fe71e65f419d": { + "balance": "1000000000000000000000000000" + }, + "0xb30f304642de3fee4365ed5cd06ea2e69d3fd0ca": { + "balance": "1000000000000000000000000000" + }, + "0x0886328869e4e1f401e1052a5f4aae8b45f42610": { + "balance": "1000000000000000000000000000" + }, + "0xf48de4a0c2939e62891f3c6aca68982975477e45": { + "balance": "1000000000000000000000000000" + } + }, + "number":"0x0", + "gasUsed":"0x0", + "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/config/besu/IBFTgenesis.json b/config/besu/IBFTgenesis.json new file mode 100644 index 0000000..0f81a32 --- /dev/null +++ b/config/besu/IBFTgenesis.json @@ -0,0 +1,92 @@ +{ + "config" : { + "chainId" : 1337, + "homesteadBlock": 0, + "daoForkBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "constantinoplefixblock" : 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "zeroBaseFee": true, + "ibft2" : { + "blockperiodseconds" : 5, + "epochlength" : 30000, + "requesttimeoutseconds" : 10 + } + }, + "nonce" : "0x0", + "timestamp" : "0x58ee40ba", + "gasLimit" : "0xf7b760", + "difficulty" : "0x1", + "mixHash" : "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365", + "extraData": "0xf87ea00000000000000000000000000000000000000000000000000000000000000000f8549493917cadbace5dfce132b991732c6cda9bcc5b8a9427a97c9aaf04f18f3014c32e036dd0ac76da5f1894ce412f988377e31f4d0ff12d74df73b51c42d0ca9498c1334496614aed49d2e81526d089f7264fed9c808400000000c0", + "coinbase" : "0x0000000000000000000000000000000000000000", + "alloc" : { + "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73" : { + "privateKey" : "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "comment" : "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance" : "0x130EE8E7179044400000" + }, + "0x627306090abaB3A6e1400e9345bC60c78a8BEf57" : { + "privateKey" : "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3", + "comment" : "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance" : "90000000000000000000000" + }, + "0xf17f52151EbEF6C7334FAD080c5704D77216b732" : { + "privateKey" : "0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f", + "comment" : "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance" : "90000000000000000000000" + }, + "0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5": { + "balance": "1000000000000000000000000000" + }, + "0xca843569e3427144cead5e4d5999a3d0ccf92b8e": { + "balance": "1000000000000000000000000000" + }, + "0x0fbdc686b912d7722dc86510934589e0aaf3b55a": { + "balance": "1000000000000000000000000000" + }, + "0xc9c913c8c3c1cd416d80a0abf475db2062f161f6": { + "balance": "1000000000000000000000000000" + }, + "0xed9d02e382b34818e88b88a309c7fe71e65f419d": { + "balance": "1000000000000000000000000000" + }, + "0xb30f304642de3fee4365ed5cd06ea2e69d3fd0ca": { + "balance": "1000000000000000000000000000" + }, + "0x0886328869e4e1f401e1052a5f4aae8b45f42610": { + "balance": "1000000000000000000000000000" + }, + "0xf48de4a0c2939e62891f3c6aca68982975477e45": { + "balance": "1000000000000000000000000000" + }, + "0x0000000000000000000000000000000000008888": { + "comment": "Account Ingress smart contract", + "balance": "0", + "code": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063936421d511610066578063936421d5146101ca578063a43e04d8146102fb578063de8fa43114610341578063e001f8411461035f578063fe9fbb80146103c55761009e565b80630d2020dd146100a357806310d9042e1461011157806311601306146101705780631e7c27cb1461018e5780638aa10435146101ac575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610421565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101196104d6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561015c578082015181840152602081019050610141565b505050509050019250505060405180910390f35b61017861052e565b6040518082815260200191505060405180910390f35b610196610534565b6040518082815260200191505060405180910390f35b6101b461053a565b6040518082815260200191505060405180910390f35b6102e1600480360360c08110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610544565b604051808215151515815260200191505060405180910390f35b6103276004803603602081101561031157600080fd5b810190808035906020019092919050505061073f565b604051808215151515815260200191505060405180910390f35b610349610a1e565b6040518082815260200191505060405180910390f35b6103ab6004803603604081101561037557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2b565b604051808215151515815260200191505060405180910390f35b610407600480360360208110156103db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610caf565b604051808215151515815260200191505060405180910390f35b60008060001b821161049b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060600380548060200260200160405190810160405280929190818152602001828054801561052457602002820191906000526020600020905b815481526020019060010190808311610510575b5050505050905090565b60005481565b60015481565b6000600554905090565b60008073ffffffffffffffffffffffffffffffffffffffff16610568600054610421565b73ffffffffffffffffffffffffffffffffffffffff16141561058d5760019050610735565b600260008054815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663936421d58888888888886040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106a857808201518184015260208101905061068d565b50505050905090810190601f1680156106d55780820380516001836020036101000a031916815260200191505b5097505050505050505060206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d602081101561072157600080fd5b810190808051906020019092919050505090505b9695505050505050565b60008060001b82116107b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b600060038054905011610817576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526047815260200180610e446047913960600191505060405180910390fd5b61082033610caf565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610e19602b913960400191505060405180910390fd5b6000600460008481526020019081526020016000205490506000811180156108a257506003805490508111155b15610a135760038054905081146109105760006003600160038054905003815481106108ca57fe5b9060005260206000200154905080600360018403815481106108e857fe5b9060005260206000200181905550816004600083815260200190815260200160002081905550505b600380548061091b57fe5b600190038181906000526020600020016000905590556000600460008581526020019081526020016000208190555060006002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af600084604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050610a19565b60009150505b919050565b6000600380549050905090565b60008060001b8311610aa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610e8b6022913960400191505060405180910390fd5b610b3433610caf565b610b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610e19602b913960400191505060405180910390fd5b600060046000858152602001908152602001600020541415610be8576003839080600181540180825580915050906001820390600052602060002001600090919290919091505560046000858152602001908152602001600020819055505b816002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af8284604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d235760019050610e13565b60026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9fbb80836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dd557600080fd5b505afa158015610de9573d6000803e3d6000fd5b505050506040513d6020811015610dff57600080fd5b810190808051906020019092919050505090505b91905056fe4e6f7420617574686f72697a656420746f2075706461746520636f6e74726163742072656769737472792e4d7573742068617665206174206c65617374206f6e65207265676973746572656420636f6e747261637420746f20657865637574652064656c657465206f7065726174696f6e2e436f6e74726163742061646472657373206d757374206e6f74206265207a65726f2ea265627a7a7230582041609b4b53a670d9d29d1c024dd9467b05a85c59786466daf08dcc1f75f8f6be64736f6c63430005090032", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x72756c6573000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x61646d696e697374726174696f6e000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0f4240" + } + }, + "0x0000000000000000000000000000000000009999": { + "comment": "Node Ingress smart contract", + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a43e04d81161005b578063a43e04d814610196578063de8fa431146101dc578063e001f841146101fa578063fe9fbb801461026057610088565b80630d2020dd1461008d57806310d9042e146100fb578063116013061461015a5780631e7c27cb14610178575b600080fd5b6100b9600480360360208110156100a357600080fd5b81019080803590602001909291905050506102bc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610103610371565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561014657808201518184015260208101905061012b565b505050509050019250505060405180910390f35b6101626103c9565b6040518082815260200191505060405180910390f35b6101806103cf565b6040518082815260200191505060405180910390f35b6101c2600480360360208110156101ac57600080fd5b81019080803590602001909291905050506103d5565b604051808215151515815260200191505060405180910390f35b6101e46106b4565b6040518082815260200191505060405180910390f35b6102466004803603604081101561021057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c1565b604051808215151515815260200191505060405180910390f35b6102a26004803603602081101561027657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610945565b604051808215151515815260200191505060405180910390f35b60008060001b8211610336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b606060038054806020026020016040519081016040528092919081815260200182805480156103bf57602002820191906000526020600020905b8154815260200190600101908083116103ab575b5050505050905090565b60005481565b60015481565b60008060001b821161044f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b6000600380549050116104ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526047815260200180610ada6047913960600191505060405180910390fd5b6104b633610945565b61050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610aaf602b913960400191505060405180910390fd5b60006004600084815260200190815260200160002054905060008111801561053857506003805490508111155b156106a95760038054905081146105a657600060036001600380549050038154811061056057fe5b90600052602060002001549050806003600184038154811061057e57fe5b9060005260206000200181905550816004600083815260200190815260200160002081905550505b60038054806105b157fe5b600190038181906000526020600020016000905590556000600460008581526020019081526020016000208190555060006002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af600084604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a160019150506106af565b60009150505b919050565b6000600380549050905090565b60008060001b831161073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610b216022913960400191505060405180910390fd5b6107ca33610945565b61081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610aaf602b913960400191505060405180910390fd5b60006004600085815260200190815260200160002054141561087e576003839080600181540180825580915050906001820390600052602060002001600090919290919091505560046000858152602001908152602001600020819055505b816002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af8284604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109b95760019050610aa9565b60026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9fbb80836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a6b57600080fd5b505afa158015610a7f573d6000803e3d6000fd5b505050506040513d6020811015610a9557600080fd5b810190808051906020019092919050505090505b91905056fe4e6f7420617574686f72697a656420746f2075706461746520636f6e74726163742072656769737472792e4d7573742068617665206174206c65617374206f6e65207265676973746572656420636f6e747261637420746f20657865637574652064656c657465206f7065726174696f6e2e436f6e74726163742061646472657373206d757374206e6f74206265207a65726f2ea265627a7a723058206703bdfb54a7a3eb61936f024bb43f91b3a8ce1448dc4d9593458137e30b983f64736f6c63430005090032", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x72756c6573000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x61646d696e697374726174696f6e000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0f4240" + } + } + } +} diff --git a/config/besu/QBFTgenesis.json b/config/besu/QBFTgenesis.json new file mode 100644 index 0000000..c83e343 --- /dev/null +++ b/config/besu/QBFTgenesis.json @@ -0,0 +1,95 @@ +{ + "config" : { + "chainId" : 1337, + "homesteadBlock": 0, + "daoForkBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "constantinoplefixblock" : 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "zeroBaseFee": true, + "qbft": { + "epochlength": 30000, + "blockperiodseconds": 5, + "requesttimeoutseconds": 10 + } + }, + "nonce" : "0x0", + "timestamp" : "0x58ee40ba", + "gasLimit" : "0xf7b760", + "difficulty" : "0x1", + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "mixHash" : "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365", + "extraData": "0xf87aa00000000000000000000000000000000000000000000000000000000000000000f8549493917cadbace5dfce132b991732c6cda9bcc5b8a9427a97c9aaf04f18f3014c32e036dd0ac76da5f1894ce412f988377e31f4d0ff12d74df73b51c42d0ca9498c1334496614aed49d2e81526d089f7264fed9cc080c0", + "coinbase" : "0x0000000000000000000000000000000000000000", + "alloc" : { + "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73" : { + "privateKey" : "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "comment" : "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance" : "90000000000000000000000" + }, + "0x627306090abaB3A6e1400e9345bC60c78a8BEf57" : { + "privateKey" : "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3", + "comment" : "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance" : "0x130EE8E7179044400000" + }, + "0xf17f52151EbEF6C7334FAD080c5704D77216b732" : { + "privateKey" : "0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f", + "comment" : "private key and this comment are ignored. In a real chain, the private key should NOT be stored", + "balance" : "90000000000000000000000" + }, + "0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5": { + "balance": "1000000000000000000000000000" + }, + "0xca843569e3427144cead5e4d5999a3d0ccf92b8e": { + "balance": "1000000000000000000000000000" + }, + "0x0fbdc686b912d7722dc86510934589e0aaf3b55a": { + "balance": "1000000000000000000000000000" + }, + "0xc9c913c8c3c1cd416d80a0abf475db2062f161f6": { + "balance": "1000000000000000000000000000" + }, + "0xed9d02e382b34818e88b88a309c7fe71e65f419d": { + "balance": "1000000000000000000000000000" + }, + "0xb30f304642de3fee4365ed5cd06ea2e69d3fd0ca": { + "balance": "1000000000000000000000000000" + }, + "0x0886328869e4e1f401e1052a5f4aae8b45f42610": { + "balance": "1000000000000000000000000000" + }, + "0xf48de4a0c2939e62891f3c6aca68982975477e45": { + "balance": "1000000000000000000000000000" + }, + "0x0000000000000000000000000000000000008888": { + "comment": "Account Ingress smart contract", + "balance": "0", + "code": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063936421d511610066578063936421d5146101ca578063a43e04d8146102fb578063de8fa43114610341578063e001f8411461035f578063fe9fbb80146103c55761009e565b80630d2020dd146100a357806310d9042e1461011157806311601306146101705780631e7c27cb1461018e5780638aa10435146101ac575b600080fd5b6100cf600480360360208110156100b957600080fd5b8101908080359060200190929190505050610421565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101196104d6565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561015c578082015181840152602081019050610141565b505050509050019250505060405180910390f35b61017861052e565b6040518082815260200191505060405180910390f35b610196610534565b6040518082815260200191505060405180910390f35b6101b461053a565b6040518082815260200191505060405180910390f35b6102e1600480360360c08110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610544565b604051808215151515815260200191505060405180910390f35b6103276004803603602081101561031157600080fd5b810190808035906020019092919050505061073f565b604051808215151515815260200191505060405180910390f35b610349610a1e565b6040518082815260200191505060405180910390f35b6103ab6004803603604081101561037557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a2b565b604051808215151515815260200191505060405180910390f35b610407600480360360208110156103db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610caf565b604051808215151515815260200191505060405180910390f35b60008060001b821161049b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6060600380548060200260200160405190810160405280929190818152602001828054801561052457602002820191906000526020600020905b815481526020019060010190808311610510575b5050505050905090565b60005481565b60015481565b6000600554905090565b60008073ffffffffffffffffffffffffffffffffffffffff16610568600054610421565b73ffffffffffffffffffffffffffffffffffffffff16141561058d5760019050610735565b600260008054815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663936421d58888888888886040518763ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106a857808201518184015260208101905061068d565b50505050905090810190601f1680156106d55780820380516001836020036101000a031916815260200191505b5097505050505050505060206040518083038186803b1580156106f757600080fd5b505afa15801561070b573d6000803e3d6000fd5b505050506040513d602081101561072157600080fd5b810190808051906020019092919050505090505b9695505050505050565b60008060001b82116107b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b600060038054905011610817576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526047815260200180610e446047913960600191505060405180910390fd5b61082033610caf565b610875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610e19602b913960400191505060405180910390fd5b6000600460008481526020019081526020016000205490506000811180156108a257506003805490508111155b15610a135760038054905081146109105760006003600160038054905003815481106108ca57fe5b9060005260206000200154905080600360018403815481106108e857fe5b9060005260206000200181905550816004600083815260200190815260200160002081905550505b600380548061091b57fe5b600190038181906000526020600020016000905590556000600460008581526020019081526020016000208190555060006002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af600084604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050610a19565b60009150505b919050565b6000600380549050905090565b60008060001b8311610aa5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610e8b6022913960400191505060405180910390fd5b610b3433610caf565b610b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610e19602b913960400191505060405180910390fd5b600060046000858152602001908152602001600020541415610be8576003839080600181540180825580915050906001820390600052602060002001600090919290919091505560046000858152602001908152602001600020819055505b816002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af8284604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610d235760019050610e13565b60026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9fbb80836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610dd557600080fd5b505afa158015610de9573d6000803e3d6000fd5b505050506040513d6020811015610dff57600080fd5b810190808051906020019092919050505090505b91905056fe4e6f7420617574686f72697a656420746f2075706461746520636f6e74726163742072656769737472792e4d7573742068617665206174206c65617374206f6e65207265676973746572656420636f6e747261637420746f20657865637574652064656c657465206f7065726174696f6e2e436f6e74726163742061646472657373206d757374206e6f74206265207a65726f2ea265627a7a7230582041609b4b53a670d9d29d1c024dd9467b05a85c59786466daf08dcc1f75f8f6be64736f6c63430005090032", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x72756c6573000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x61646d696e697374726174696f6e000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0f4240" + } + }, + "0x0000000000000000000000000000000000009999": { + "comment": "Node Ingress smart contract", + "balance": "0", + "code": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c8063a43e04d81161005b578063a43e04d814610196578063de8fa431146101dc578063e001f841146101fa578063fe9fbb801461026057610088565b80630d2020dd1461008d57806310d9042e146100fb578063116013061461015a5780631e7c27cb14610178575b600080fd5b6100b9600480360360208110156100a357600080fd5b81019080803590602001909291905050506102bc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610103610371565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561014657808201518184015260208101905061012b565b505050509050019250505060405180910390f35b6101626103c9565b6040518082815260200191505060405180910390f35b6101806103cf565b6040518082815260200191505060405180910390f35b6101c2600480360360208110156101ac57600080fd5b81019080803590602001909291905050506103d5565b604051808215151515815260200191505060405180910390f35b6101e46106b4565b6040518082815260200191505060405180910390f35b6102466004803603604081101561021057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506106c1565b604051808215151515815260200191505060405180910390f35b6102a26004803603602081101561027657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610945565b604051808215151515815260200191505060405180910390f35b60008060001b8211610336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b606060038054806020026020016040519081016040528092919081815260200182805480156103bf57602002820191906000526020600020905b8154815260200190600101908083116103ab575b5050505050905090565b60005481565b60015481565b60008060001b821161044f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b6000600380549050116104ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526047815260200180610ada6047913960600191505060405180910390fd5b6104b633610945565b61050b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610aaf602b913960400191505060405180910390fd5b60006004600084815260200190815260200160002054905060008111801561053857506003805490508111155b156106a95760038054905081146105a657600060036001600380549050038154811061056057fe5b90600052602060002001549050806003600184038154811061057e57fe5b9060005260206000200181905550816004600083815260200190815260200160002081905550505b60038054806105b157fe5b600190038181906000526020600020016000905590556000600460008581526020019081526020016000208190555060006002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af600084604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a160019150506106af565b60009150505b919050565b6000600380549050905090565b60008060001b831161073b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f436f6e7472616374206e616d65206d757374206e6f7420626520656d7074792e81525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156107c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180610b216022913960400191505060405180910390fd5b6107ca33610945565b61081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180610aaf602b913960400191505060405180910390fd5b60006004600085815260200190815260200160002054141561087e576003839080600181540180825580915050906001820390600052602060002001600090919290919091505560046000858152602001908152602001600020819055505b816002600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fe3d908a1f6d2467f8e7c8198f30125843211345eedb763beb4cdfb7fe728a5af8284604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff1660026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156109b95760019050610aa9565b60026000600154815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fe9fbb80836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a6b57600080fd5b505afa158015610a7f573d6000803e3d6000fd5b505050506040513d6020811015610a9557600080fd5b810190808051906020019092919050505090505b91905056fe4e6f7420617574686f72697a656420746f2075706461746520636f6e74726163742072656769737472792e4d7573742068617665206174206c65617374206f6e65207265676973746572656420636f6e747261637420746f20657865637574652064656c657465206f7065726174696f6e2e436f6e74726163742061646472657373206d757374206e6f74206265207a65726f2ea265627a7a723058206703bdfb54a7a3eb61936f024bb43f91b3a8ce1448dc4d9593458137e30b983f64736f6c63430005090032", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x72756c6573000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x61646d696e697374726174696f6e000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0f4240" + } + } + } + } diff --git a/config/besu/config.toml b/config/besu/config.toml new file mode 100644 index 0000000..1d20f33 --- /dev/null +++ b/config/besu/config.toml @@ -0,0 +1,42 @@ + +genesis-file="/config/genesis.json" +node-private-key-file="/opt/besu/keys/nodekey" +logging="INFO" +data-path="/opt/besu/data" +host-allowlist=["*"] +min-gas-price=0 + +# rpc +rpc-http-enabled=true +rpc-http-host="0.0.0.0" +rpc-http-port=8545 +rpc-http-cors-origins=["*"] + +# ws +rpc-ws-enabled=true +rpc-ws-host="0.0.0.0" +rpc-ws-port=8546 + +# graphql +graphql-http-enabled=true +graphql-http-host="0.0.0.0" +graphql-http-port=8547 +graphql-http-cors-origins=["*"] + +# metrics +metrics-enabled=true +metrics-host="0.0.0.0" +metrics-port=9545 + +# permissions +permissions-nodes-config-file-enabled=true +permissions-nodes-config-file="/config/permissions_config.toml" + +# bootnodes +bootnodes=["enode://8208a3f344695d44e9cf2c023683cbea7b9343e2f70a5e804bd2c93858e945f8f91439eef96a4ab6c47ff06637d6fbe6472f96de1655a1bee57ea896654f3a22@172.16.239.11:30303"] + + +# Discovery at boot is set to a list of static files, but will also discover new nodes should they be added +# static nodes +static-nodes-file="/config/static-nodes.json" +discovery-enabled=true diff --git a/config/besu/log-config-splunk.xml b/config/besu/log-config-splunk.xml new file mode 100644 index 0000000..8b01707 --- /dev/null +++ b/config/besu/log-config-splunk.xml @@ -0,0 +1,46 @@ + + + + ${env:LOG_LEVEL:-INFO} + ${env:LOGGER:-Console} + ${env:HOST:-${docker:containerId:-${hostName:-locahost}}} + ${env:SPLUNK_URL} + ${env:SPLUNK_TOKEN} + ${env:SPLUNK_INDEX} + ${env:SPLUNK_SOURCE:-besu} + ${env:SPLUNK_SOURCETYPE:-besu} + ${env:SPLUNK_BATCH_SIZE_BYTES:-65536} + ${env:SPLUNK_BATCH_SIZE_COUNT:-1000} + ${env:SPLUNK_BATCH_INTERVAL:-500} + ${env:SPLUNK_SKIPTLSVERIFY:-false} + + + + + + + + + + + + + + + + + + + + diff --git a/config/besu/log-config.xml b/config/besu/log-config.xml new file mode 100644 index 0000000..f7eca4e --- /dev/null +++ b/config/besu/log-config.xml @@ -0,0 +1,28 @@ + + + + + INFO + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/besu/permissions_config.toml b/config/besu/permissions_config.toml new file mode 100644 index 0000000..12b37b6 --- /dev/null +++ b/config/besu/permissions_config.toml @@ -0,0 +1,11 @@ +nodes-allowlist=[ +"enode://8208a3f344695d44e9cf2c023683cbea7b9343e2f70a5e804bd2c93858e945f8f91439eef96a4ab6c47ff06637d6fbe6472f96de1655a1bee57ea896654f3a22@172.16.239.11:30303", +"enode://b9050e002aa42464e6b07c811a1f9dfec01249af03f67b753e8415420649b184447bb2a784863ccbf327ad9e31aaba803464979dfe6a7facc669151a5fa6ad1b@172.16.239.12:30303", +"enode://59cf0c623c582fa9b19bdf70fb6bade07f4ae32218dd4d1c7e2c7e65acf87da45cf2ab55d16d27360aafef17622c37c09db60d7680ebcc17b78867f4c05bcaa4@172.16.239.13:30303", +"enode://2fd5b5b6ad529f55b71602026d1849d0036f06482368b5812fa793014195d3571b0840dbc4175617de2a12db8f1222c012420d471ae5c0d982118625cae58868@172.16.239.14:30303", +"enode://86fcc16f4730fbfd238dc17ea552854c0943923bb1d5e886e5601b8d884fb0519060e0023f495dd24ffe60a65660fb7fdcdebfceedd2b3673dfa63658825924b@172.16.239.15:30303", +"enode://98496800174b3c73ae33cba59f8f5e686cd488f7897c2edb52e2cf46383d75cd03dbb58dde07185bc0953f98800ca9a89f4b5ef450c5e51292ea08ec6130ee0c@172.16.239.16:30303", +"enode://ad2c79c6561bc8212c2e8382611c62e406e767d1f3106c68ca206900f575cb8ba9a8be111c645cd9803701d684454c782c40d2361b000a32ed03d26228b30ec1@172.16.239.17:30303", +"enode://af19c92deb635bd7720634de9b2e7908208530d6f5e96eee003a8f1799e5be4037957d7e2fdbe3605e3a38dab05c961679c02133a0e624e23a72f7961e8af6ac@172.16.239.18:30303" +] + diff --git a/config/besu/static-nodes.json b/config/besu/static-nodes.json new file mode 100644 index 0000000..67df70b --- /dev/null +++ b/config/besu/static-nodes.json @@ -0,0 +1,11 @@ +[ +"enode://8208a3f344695d44e9cf2c023683cbea7b9343e2f70a5e804bd2c93858e945f8f91439eef96a4ab6c47ff06637d6fbe6472f96de1655a1bee57ea896654f3a22@172.16.239.11:30303", +"enode://b9050e002aa42464e6b07c811a1f9dfec01249af03f67b753e8415420649b184447bb2a784863ccbf327ad9e31aaba803464979dfe6a7facc669151a5fa6ad1b@172.16.239.12:30303", +"enode://59cf0c623c582fa9b19bdf70fb6bade07f4ae32218dd4d1c7e2c7e65acf87da45cf2ab55d16d27360aafef17622c37c09db60d7680ebcc17b78867f4c05bcaa4@172.16.239.13:30303", +"enode://2fd5b5b6ad529f55b71602026d1849d0036f06482368b5812fa793014195d3571b0840dbc4175617de2a12db8f1222c012420d471ae5c0d982118625cae58868@172.16.239.14:30303", +"enode://86fcc16f4730fbfd238dc17ea552854c0943923bb1d5e886e5601b8d884fb0519060e0023f495dd24ffe60a65660fb7fdcdebfceedd2b3673dfa63658825924b@172.16.239.15:30303", +"enode://98496800174b3c73ae33cba59f8f5e686cd488f7897c2edb52e2cf46383d75cd03dbb58dde07185bc0953f98800ca9a89f4b5ef450c5e51292ea08ec6130ee0c@172.16.239.16:30303", +"enode://ad2c79c6561bc8212c2e8382611c62e406e767d1f3106c68ca206900f575cb8ba9a8be111c645cd9803701d684454c782c40d2361b000a32ed03d26228b30ec1@172.16.239.17:30303", +"enode://af19c92deb635bd7720634de9b2e7908208530d6f5e96eee003a8f1799e5be4037957d7e2fdbe3605e3a38dab05c961679c02133a0e624e23a72f7961e8af6ac@172.16.239.18:30303" +] + \ No newline at end of file diff --git a/config/ethsigner/createKey.js b/config/ethsigner/createKey.js new file mode 100644 index 0000000..adef587 --- /dev/null +++ b/config/ethsigner/createKey.js @@ -0,0 +1,8 @@ +const Web3 = require('web3') + +// Web3 initialization (should point to the JSON-RPC endpoint) +const web3 = new Web3(new Web3.providers.HttpProvider('http://127.0.0.1:8545')) + +var V3KeyStore = web3.eth.accounts.encrypt("797bbe0373132e8c5483515b68ecbb6d3581b56f0205b653ad2b30a559e83891", "Password1"); +console.log(JSON.stringify(V3KeyStore)); +process.exit(); diff --git a/config/ethsigner/key b/config/ethsigner/key new file mode 100644 index 0000000..996e67f --- /dev/null +++ b/config/ethsigner/key @@ -0,0 +1 @@ +{"version":3,"id":"0e3d044a-26b4-429f-a5d3-def4a62a77ec","address":"9b790656b9ec0db1936ed84b3bea605873558198","crypto":{"ciphertext":"4d34be50618c36fb57349a8a7dc7b0c46f7c6883c817087863ff4f1fbc957582","cipherparams":{"iv":"723a6a815dcaf255ebd1da1bfb14e1b8"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"3d04a3f225d3d5874388484730a30d45627399d69721a7c7fb653f8e0e90a67b","n":8192,"r":8,"p":1},"mac":"5c04e705196b35abace4da61700921d7762dba782ed68a4cd9917dd75badaacb"}} \ No newline at end of file diff --git a/config/ethsigner/password b/config/ethsigner/password new file mode 100644 index 0000000..9cada23 --- /dev/null +++ b/config/ethsigner/password @@ -0,0 +1 @@ +Password1 \ No newline at end of file diff --git a/config/grafana/provisioning/dashboards/besu.json b/config/grafana/provisioning/dashboards/besu.json new file mode 100644 index 0000000..83e898b --- /dev/null +++ b/config/grafana/provisioning/dashboards/besu.json @@ -0,0 +1,884 @@ +{ + "__inputs": [ + { + "name": "Prometheus", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "6.2.2" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Provides an overview of Besu nodes", + "editable": true, + "gnetId": 10273, + "graphTooltip": 0, + "id": null, + "iteration": 1560146167177, + "links": [], + "panels": [ + { + "columns": [], + "fontSize": "120%", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 10, + "links": [], + "options": {}, + "pageSize": null, + "scroll": true, + "showHeader": true, + "sort": { + "col": 2, + "desc": true + }, + "styles": [ + { + "alias": "", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "job", + "thresholds": [], + "type": "hidden", + "unit": "short" + }, + { + "alias": "Chain Height", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Value #A", + "thresholds": [], + "type": "number", + "unit": "locale" + }, + { + "alias": "Total Difficulty", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Value #B", + "thresholds": [], + "type": "number", + "unit": "sci" + }, + { + "alias": "", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Time", + "thresholds": [], + "type": "hidden", + "unit": "short" + }, + { + "alias": "", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "__name__", + "thresholds": [], + "type": "hidden", + "unit": "short" + }, + { + "alias": "Peer Count", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Value #C", + "thresholds": [ + "" + ], + "type": "number", + "unit": "locale" + }, + { + "alias": "Block Time (5m avg)", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Value #D", + "thresholds": [], + "type": "number", + "unit": "s" + }, + { + "alias": "System", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "instance", + "thresholds": [], + "type": "string", + "unit": "short", + "valueMaps": [] + }, + { + "alias": "Time Since Last Block", + "colorMode": "value", + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "mappingType": 1, + "pattern": "Value #E", + "thresholds": [ + "120", + "240" + ], + "type": "number", + "unit": "dtdurations" + }, + { + "alias": "Target Chain Height", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Value #F", + "thresholds": [], + "type": "number", + "unit": "locale" + }, + { + "alias": "Blocks Behind", + "colorMode": "value", + "colors": [ + "rgba(50, 172, 45, 0.97)", + "rgba(237, 129, 40, 0.89)", + "rgba(245, 54, 54, 0.9)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 2, + "mappingType": 1, + "pattern": "Value #G", + "thresholds": [ + "1", + "10" + ], + "type": "number", + "unit": "locale", + "valueMaps": [ + { + "text": "Yes", + "value": "1" + }, + { + "text": "No", + "value": "0" + } + ] + }, + { + "alias": "% Peer Limit Used", + "colorMode": "value", + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "dateFormat": "YYYY-MM-DD HH:mm:ss", + "decimals": 0, + "mappingType": 1, + "pattern": "Value #H", + "thresholds": [ + "0.25", + "0.75" + ], + "type": "number", + "unit": "percentunit" + }, + { + "alias": "", + "colorMode": null, + "colors": [ + "rgba(245, 54, 54, 0.9)", + "rgba(237, 129, 40, 0.89)", + "rgba(50, 172, 45, 0.97)" + ], + "decimals": 2, + "pattern": "/.*/", + "thresholds": [], + "type": "number", + "unit": "short" + } + ], + "targets": [ + { + "expr": "sum by (instance) (ethereum_blockchain_height{instance=~\"$system\"})", + "format": "table", + "instant": true, + "interval": "", + "intervalFactor": 1, + "legendFormat": "Chain Height", + "refId": "A" + }, + { + "expr": "sum by (instance) (ethereum_best_known_block_number{instance=~\"$system\"})", + "format": "table", + "instant": true, + "intervalFactor": 1, + "refId": "F" + }, + { + "expr": "sum by (instance) (ethereum_best_known_block_number{instance=~\"$system\"} - ethereum_blockchain_height{instance=~\"$system\"})", + "format": "table", + "instant": true, + "intervalFactor": 1, + "refId": "G" + }, + { + "expr": "sum by (instance) (besu_blockchain_difficulty_total{instance=~\"$system\"})", + "format": "table", + "instant": true, + "intervalFactor": 1, + "legendFormat": "Total Difficulty", + "refId": "B" + }, + { + "expr": "sum by (instance) (1/rate(ethereum_blockchain_height{instance=~\"$system\"}[5m]))", + "format": "table", + "instant": true, + "intervalFactor": 1, + "refId": "D" + }, + { + "expr": "sum by (instance) (time() - besu_blockchain_chain_head_timestamp{instance=~\"$system\"})", + "format": "table", + "instant": true, + "intervalFactor": 1, + "refId": "E" + }, + { + "expr": "sum by (instance) (ethereum_peer_count{instance=~\"$system\"})", + "format": "table", + "instant": true, + "intervalFactor": 1, + "legendFormat": "Peer Count", + "refId": "C" + }, + { + "expr": "sum by (instance) (ethereum_peer_count{instance=~\"$system\"} / ethereum_peer_limit{instance=~\"$system\"})", + "format": "table", + "instant": true, + "intervalFactor": 1, + "refId": "H" + } + ], + "title": "Overview", + "transform": "table", + "type": "table" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "fill": 1, + "gridPos": { + "h": 14, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 12, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "1/rate(ethereum_blockchain_height{instance=~\"$system\"}[5m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + }, + { + "expr": "", + "format": "time_series", + "intervalFactor": 1, + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Block Time", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 10, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "fill": 1, + "gridPos": { + "h": 14, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 13, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "rightSide": false, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "ethereum_best_known_block_number{instance=~\"$system\"} - ethereum_blockchain_height{instance=~\"$system\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Blocks Behind", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "locale", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "fill": 1, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "irate(process_cpu_seconds_total{instance=~\"$system\"}[1m])", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "CPU Time IRate [{{instance}}]", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fill": 1, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 35 + }, + "id": 8, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(jvm_gc_collection_seconds_sum{instance=~\"$system\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 5, + "legendFormat": "{{gc}} [{{instance}}]", + "metric": "jvm_gc_collection_seconds_sum", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "GC time", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "decimals": null, + "format": "percentunit", + "label": null, + "logBase": 1, + "max": "1", + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "fill": 1, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 35 + }, + "id": 4, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": {}, + "percentage": false, + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "jvm_memory_bytes_used{instance=~\"$system\", area=\"heap\"} + ignoring(area) jvm_memory_bytes_used{instance=~\"$system\", area=\"nonheap\"}", + "format": "time_series", + "intervalFactor": 5, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory Used", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": "10s", + "schemaVersion": 18, + "style": "dark", + "tags": [ + "besu", + "ethereum" + ], + "templating": { + "list": [ + { + "allValue": null, + "current": {}, + "datasource": "Prometheus", + "definition": "ethereum_blockchain_height", + "hide": 0, + "includeAll": true, + "label": "System", + "multi": true, + "name": "system", + "options": [], + "query": "ethereum_blockchain_height", + "refresh": 2, + "regex": "/instance=\"([^\"]*)\"/", + "skipUrlSync": false, + "sort": 5, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-12h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "Besu Overview", + "uid": "XE4V0WGZz", + "version": 1 +} diff --git a/config/grafana/provisioning/dashboards/dashboard.yml b/config/grafana/provisioning/dashboards/dashboard.yml new file mode 100644 index 0000000..e1f37c7 --- /dev/null +++ b/config/grafana/provisioning/dashboards/dashboard.yml @@ -0,0 +1,12 @@ +--- +apiVersion: 1 + +providers: + - name: 'Prometheus' + orgId: 1 + folder: '' + type: file + disableDeletion: false + editable: true + options: + path: /etc/grafana/provisioning/dashboards diff --git a/config/grafana/provisioning/dashboards/loki.json b/config/grafana/provisioning/dashboards/loki.json new file mode 100644 index 0000000..758f63d --- /dev/null +++ b/config/grafana/provisioning/dashboards/loki.json @@ -0,0 +1,284 @@ +{ + "__inputs": [ + { + "name": "loki", + "label": "loki", + "description": "", + "type": "datasource", + "pluginId": "loki", + "pluginName": "Loki" + } + ], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "7.1.0" + }, + { + "type": "panel", + "id": "graph", + "name": "Graph", + "version": "" + }, + { + "type": "panel", + "id": "logs", + "name": "Logs", + "version": "" + }, + { + "type": "datasource", + "id": "loki", + "name": "Loki", + "version": "1.0.0" + } + ], + "annotations": { + "list": [ + { + "$$hashKey": "object:75", + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "Quorum Log Viewer for Loki", + "editable": false, + "gnetId": 13639, + "graphTooltip": 0, + "id": null, + "iteration": 1608932746420, + "links": [ + { + "$$hashKey": "object:59", + "icon": "bolt", + "includeVars": true, + "keepTime": true, + "tags": [], + "targetBlank": true, + "title": "View In Explore", + "type": "link", + "url": "/explore?orgId=1&left=[\"now-1h\",\"now\",\"Loki\",{\"expr\":\"{job=\\\"$app\\\"}\"},{\"ui\":[true,true,true,\"none\"]}]" + }, + { + "$$hashKey": "object:61", + "icon": "external link", + "tags": [], + "targetBlank": true, + "title": "Learn LogQL", + "type": "link", + "url": "https://grafana.com/docs/loki/latest/logql/" + } + ], + "panels": [ + { + "aliasColors": {}, + "bars": true, + "dashLength": 10, + "dashes": false, + "datasource": "Loki", + "fieldConfig": { + "defaults": { + "custom": {}, + "links": [] + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "hiddenSeries": false, + "id": 6, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": false, + "total": false, + "values": false + }, + "lines": false, + "linewidth": 1, + "nullPointMode": "null", + "percentage": false, + "pluginVersion": "7.1.0", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "sum(count_over_time({job=\"$app\"} |= \"$search\" [$__interval]))", + "legendFormat": "", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:168", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + }, + { + "$$hashKey": "object:169", + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": false + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "datasource": "Loki", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "gridPos": { + "h": 25, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "maxDataPoints": "", + "options": { + "showLabels": false, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "expr": "{job=\"$app\"} |= \"$search\" | logfmt", + "hide": false, + "legendFormat": "", + "refId": "A" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "", + "transparent": true, + "type": "logs" + } + ], + "refresh": false, + "schemaVersion": 26, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "allValue": null, + "current": {}, + "datasource": "Loki", + "definition": "label_values(job)", + "hide": 0, + "includeAll": false, + "label": "App", + "multi": false, + "name": "app", + "options": [], + "query": "label_values(job)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": false, + "text": "", + "value": "" + }, + "hide": 0, + "label": "String Match", + "name": "search", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "hidden": false, + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "Quorum Logs Loki", + "uid": "Ak6eXLsPxFemKYKEXfcH", + "version": 1 +} \ No newline at end of file diff --git a/config/grafana/provisioning/dashboards/quorum.json b/config/grafana/provisioning/dashboards/quorum.json new file mode 100644 index 0000000..b248a54 --- /dev/null +++ b/config/grafana/provisioning/dashboards/quorum.json @@ -0,0 +1,2205 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": 2, + "iteration": 1620168805551, + "links": [], + "panels": [ + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 136, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": null, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": null, + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Instance" + }, + "properties": [ + { + "id": "custom.width", + "value": 423 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Latest Block" + }, + "properties": [ + { + "id": "custom.width", + "value": 386 + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 131, + "options": { + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Latest Block" + } + ] + }, + "pluginVersion": "7.4.5", + "targets": [ + { + "expr": "sum by (instance) (chain_head_block{instance=~\"$instance\"})", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + }, + { + "expr": "sum by (instance) (1/rate(chain_head_block{instance=~\"$instance\"}[5m]))", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "D" + }, + { + "expr": "(p2p_peers{instance=~\"$instance\"})", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "E" + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Overview", + "transformations": [ + { + "id": "merge", + "options": {} + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value #B": true, + "Value #C": true, + "__name__": true, + "job": true + }, + "indexByName": {}, + "renameByName": { + "Value #A": "Latest Block", + "Value #B": "", + "Value #D": "Block Time", + "Value #E": "Peers", + "instance": "Instance" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 4, + "panels": [], + "title": "Blockchain", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "cacheTimeout": null, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 9 + }, + "hiddenSeries": false, + "id": 110, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "chain_head_block{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Latest Block", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "cacheTimeout": null, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "color": {}, + "custom": {}, + "thresholds": { + "mode": "absolute", + "steps": [] + } + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 9 + }, + "hiddenSeries": false, + "id": 132, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "abs(1/rate(chain_head_block{instance=~\"$instance\"}[5m]))", + "format": "time_series", + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Block Time", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "s", + "label": null, + "logBase": 1, + "max": null, + "min": "0", + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "cacheTimeout": null, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 15 + }, + "hiddenSeries": false, + "id": 112, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": true, + "steppedLine": false, + "targets": [ + { + "expr": "chain_execution{quantile=\"$quantile\", instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "execution (q=$quantile)", + "refId": "A" + }, + { + "expr": "chain_validation{quantile=\"$quantile\", instance=~\"$instance\"} ", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "validation (q=$quantile)", + "refId": "B" + }, + { + "expr": "chain_write{quantile=\"$quantile\", instance=~\"$instance\"}", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "commit (q=$quantile)", + "refId": "C" + }, + { + "expr": "chain_account_reads{quantile=\"$quantile\", instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account read (q=$quantile)", + "refId": "D" + }, + { + "expr": "chain_account_updates{quantile=\"$quantile\", instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account update (q=$quantile)", + "refId": "E" + }, + { + "expr": "chain_account_hashes{quantile=\"$quantile\", instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account hashe (q=$quantile)", + "refId": "F" + }, + { + "expr": "chain_account_commits{quantile=\"$quantile\", instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "account commit (q=$quantile)", + "refId": "G" + }, + { + "expr": "chain_storage_reads{quantile=\"$quantile\", instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage read (q=$quantile)", + "refId": "H" + }, + { + "expr": "chain_storage_updates{quantile=\"$quantile\", instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage update (q=$quantile)", + "refId": "I" + }, + { + "expr": "chain_storage_hashes{quantile=\"$quantile\", instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage hashe (q=$quantile)", + "refId": "J" + }, + { + "expr": "chain_storage_commits{quantile=\"$quantile\", instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "storage commit (q=$quantile)", + "refId": "K" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Block processing", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "ns", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "cacheTimeout": null, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 23 + }, + "hiddenSeries": false, + "id": 116, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "txpool_pending{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable", + "refId": "A" + }, + { + "expr": "txpool_queued{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped", + "refId": "B" + }, + { + "expr": "txpool_local{instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "local", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Transaction pool", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "cacheTimeout": null, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 30 + }, + "hiddenSeries": false, + "id": 117, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(txpool_valid{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "valid", + "refId": "K" + }, + { + "expr": "rate(txpool_invalid{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "invalid", + "refId": "A" + }, + { + "expr": "rate(txpool_underpriced{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "underpriced", + "refId": "B" + }, + { + "expr": "rate(txpool_pending_discard{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable discard", + "refId": "C" + }, + { + "expr": "rate(txpool_pending_replace{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable replace", + "refId": "D" + }, + { + "expr": "rate(txpool_pending_ratelimit{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable ratelimit", + "refId": "E" + }, + { + "expr": "rate(txpool_pending_nofunds{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "executable nofunds", + "refId": "F" + }, + { + "expr": "rate(txpool_queued_discard{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped discard", + "refId": "G" + }, + { + "expr": "rate(txpool_queued_replace{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped replace", + "refId": "H" + }, + { + "expr": "rate(txpool_queued_ratelimit{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped ratelimit", + "refId": "I" + }, + { + "expr": "rate(txpool_queued_nofunds{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gapped nofunds", + "refId": "J" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Transaction propagation", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "none", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": null, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 37 + }, + "id": 142, + "panels": [], + "title": "DevP2P", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 38 + }, + "hiddenSeries": false, + "id": 144, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "(p2p_peers{instance=~\"$instance\"})", + "interval": "", + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Peers", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 38 + }, + "hiddenSeries": false, + "id": 96, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(p2p_ingress{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ingress {{instance}}", + "refId": "B" + }, + { + "expr": "rate(p2p_egress{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "egress {{instance}}", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Network Traffic", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 44 + }, + "id": 17, + "panels": [], + "title": "Database", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 45 + }, + "hiddenSeries": false, + "id": 35, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(eth_db_chaindata_disk_read{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb read {{instance}}", + "refId": "B" + }, + { + "expr": "rate(eth_db_chaindata_disk_write{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb write {{instance}}", + "refId": "A" + }, + { + "expr": "rate(eth_db_chaindata_ancient_read{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient read {{instance}}", + "refId": "C" + }, + { + "expr": "rate(eth_db_chaindata_ancient_write{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient write {{instance}}", + "refId": "D" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Data rate", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 45 + }, + "hiddenSeries": false, + "id": 118, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "eth_db_chaindata_disk_read{instance=~\"$instance\", job=~\"$job\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb read", + "refId": "B" + }, + { + "expr": "eth_db_chaindata_disk_write{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb write", + "refId": "A" + }, + { + "expr": "eth_db_chaindata_ancient_read{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient read", + "refId": "C" + }, + { + "expr": "eth_db_chaindata_ancient_write{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient write", + "refId": "D" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Session totals", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 45 + }, + "hiddenSeries": false, + "id": 119, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "eth_db_chaindata_disk_size{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "leveldb [{{instance}}]", + "refId": "B" + }, + { + "expr": "eth_db_chaindata_ancient_size{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "ancient [{{instance}}]", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Storage size", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "decbytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 51 + }, + "id": 37, + "panels": [], + "title": "Trie", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 52 + }, + "hiddenSeries": false, + "id": 120, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(trie_memcache_clean_read{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "hit [{{instance}}]", + "refId": "C" + }, + { + "expr": "rate(trie_memcache_clean_write{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "miss [{{instance}}]", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Clean cache", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 52 + }, + "hiddenSeries": false, + "id": 56, + "legend": { + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": true, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(trie_memcache_gc_size{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "gc {{instance}}", + "refId": "C" + }, + { + "expr": "rate(trie_memcache_flush_size{instance=~\"$instance\"}[1m])", + "format": "time_series", + "hide": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "overflow {{instance}}", + "refId": "B" + }, + { + "expr": "rate(trie_memcache_commit_size{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "commit {{instance}}", + "refId": "A" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Dirty cache", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "collapsed": false, + "datasource": "Prometheus", + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 58 + }, + "id": 82, + "panels": [], + "title": "System", + "type": "row" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": null, + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 59 + }, + "hiddenSeries": false, + "id": 106, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "system_cpu_sysload{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "system [{{instance}}]", + "refId": "A" + }, + { + "expr": "system_cpu_syswait{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "iowait [{{instance}}]", + "refId": "B" + }, + { + "expr": "system_cpu_procload{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "geth [{{instance}}]", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "CPU", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "percent", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 59 + }, + "hiddenSeries": false, + "id": 86, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(system_memory_allocs{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "alloc [{{instance}}]", + "refId": "A" + }, + { + "expr": "system_memory_used{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "used [{{instance}}]", + "refId": "B" + }, + { + "expr": "system_memory_held{instance=~\"$instance\"}", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "held [{{instance}}]", + "refId": "C" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Memory", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "bytes", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": "Prometheus", + "fieldConfig": { + "defaults": { + "custom": {} + }, + "overrides": [] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 59 + }, + "hiddenSeries": false, + "id": 85, + "legend": { + "alignAsTable": false, + "avg": false, + "current": false, + "max": false, + "min": false, + "rightSide": false, + "show": true, + "total": false, + "values": false + }, + "lines": true, + "linewidth": 1, + "links": [], + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "7.4.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "expr": "rate(system_disk_readbytes{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "read [{{instance}}]", + "refId": "A" + }, + { + "expr": "rate(system_disk_writebytes{instance=~\"$instance\"}[1m])", + "format": "time_series", + "interval": "", + "intervalFactor": 1, + "legendFormat": "write [{{instance}}]", + "refId": "B" + } + ], + "thresholds": [], + "timeFrom": null, + "timeRegions": [], + "timeShift": null, + "title": "Disk", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "buckets": null, + "mode": "time", + "name": null, + "show": true, + "values": [] + }, + "yaxes": [ + { + "format": "Bps", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + }, + { + "format": "short", + "label": null, + "logBase": 1, + "max": null, + "min": null, + "show": true + } + ], + "yaxis": { + "align": false, + "alignLevel": null + } + } + ], + "refresh": false, + "schemaVersion": 27, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "default", + "value": "default" + }, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": "datasource", + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", + "queryValue": "", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "description": null, + "error": null, + "hide": 2, + "label": "job", + "name": "job", + "query": "validator*", + "skipUrlSync": false, + "type": "constant" + }, + { + "allValue": null, + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": "Prometheus", + "definition": "label_values(chain_head_block{}, instance)", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "instance", + "multi": false, + "name": "instance", + "options": [], + "query": { + "query": "label_values(chain_head_block{}, instance)", + "refId": "StandardVariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "tagValuesQuery": "", + "tags": [], + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": { + "selected": true, + "text": "0.5", + "value": "0.5" + }, + "description": null, + "error": null, + "hide": 0, + "includeAll": false, + "label": null, + "multi": false, + "name": "quantile", + "options": [ + { + "selected": true, + "text": "0.5", + "value": "0.5" + }, + { + "selected": false, + "text": "0.75", + "value": "0.75" + }, + { + "selected": false, + "text": "0.95", + "value": "0.95" + }, + { + "selected": false, + "text": "0.99", + "value": "0.99" + }, + { + "selected": false, + "text": "0.999", + "value": "0.999" + }, + { + "selected": false, + "text": "0.9999", + "value": "0.9999" + } + ], + "query": "0.5, 0.75, 0.95, 0.99, 0.999, 0.9999", + "queryValue": "", + "skipUrlSync": false, + "type": "custom" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "goQuorum Overview", + "uid": "a1lVy7ycin9Yv", + "version": 1 +} \ No newline at end of file diff --git a/config/grafana/provisioning/datasources/loki.yml b/config/grafana/provisioning/datasources/loki.yml new file mode 100644 index 0000000..fb1a5b6 --- /dev/null +++ b/config/grafana/provisioning/datasources/loki.yml @@ -0,0 +1,54 @@ +# config file version +apiVersion: 1 + +# list of datasources that should be deleted from the database +deleteDatasources: + - name: Graphite + orgId: 1 + +# list of datasources to insert/update depending +# what's available in the database +datasources: + # name of the datasource. Required + - name: Loki + # datasource type. Required + type: loki + # access mode. proxy or direct (Server or Browser in the UI). Required + access: proxy + # org id. will default to orgId 1 if not specified + orgId: 1 + # url + url: http://loki:3100/ + # Deprecated, use secureJsonData.password + password: + # database user, if used + user: + # database name, if used + database: + # enable/disable basic auth + basicAuth: + # basic auth username + basicAuthUser: + # Deprecated, use secureJsonData.basicAuthPassword + basicAuthPassword: + # enable/disable with credentials headers + withCredentials: + # mark as default datasource. Max one per org + isDefault: false + # fields that will be converted to json and stored in jsonData + jsonData: + graphiteVersion: "1.1" + tlsAuth: false + tlsAuthWithCACert: false + # json object of data that will be encrypted. + secureJsonData: + tlsCACert: "..." + tlsClientCert: "..." + tlsClientKey: "..." + # database password, if used + password: + # basic auth password + basicAuthPassword: + version: 1 + # allow users to edit datasources from the UI. + editable: true diff --git a/config/grafana/provisioning/datasources/prometheus.yml b/config/grafana/provisioning/datasources/prometheus.yml new file mode 100644 index 0000000..f6d9e91 --- /dev/null +++ b/config/grafana/provisioning/datasources/prometheus.yml @@ -0,0 +1,54 @@ +# config file version +apiVersion: 1 + +# list of datasources that should be deleted from the database +deleteDatasources: + - name: Graphite + orgId: 1 + +# list of datasources to insert/update depending +# what's available in the database +datasources: + # name of the datasource. Required + - name: Prometheus + # datasource type. Required + type: prometheus + # access mode. proxy or direct (Server or Browser in the UI). Required + access: proxy + # org id. will default to orgId 1 if not specified + orgId: 1 + # url + url: http://prometheus:9090/ + # Deprecated, use secureJsonData.password + password: + # database user, if used + user: + # database name, if used + database: + # enable/disable basic auth + basicAuth: + # basic auth username + basicAuthUser: + # Deprecated, use secureJsonData.basicAuthPassword + basicAuthPassword: + # enable/disable with credentials headers + withCredentials: + # mark as default datasource. Max one per org + isDefault: true + # fields that will be converted to json and stored in jsonData + jsonData: + graphiteVersion: "1.1" + tlsAuth: false + tlsAuthWithCACert: false + # json object of data that will be encrypted. + secureJsonData: + tlsCACert: "..." + tlsClientCert: "..." + tlsClientKey: "..." + # database password, if used + password: + # basic auth password + basicAuthPassword: + version: 1 + # allow users to edit datasources from the UI. + editable: true diff --git a/config/kibana/besu_overview_dashboard.ndjson b/config/kibana/besu_overview_dashboard.ndjson new file mode 100644 index 0000000..b337764 --- /dev/null +++ b/config/kibana/besu_overview_dashboard.ndjson @@ -0,0 +1,8 @@ +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"Besu - Summary","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Besu - Summary\",\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"bar_color_rules\":[{\"id\":\"732ebbd0-6e90-11ea-a9d0-a17b080cb788\"}],\"default_index_pattern\":\"metricbeat-*\",\"default_timefield\":\"@timestamp\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"index_pattern\":\"metricbeat-*\",\"interval\":\"\",\"isModelInvalid\":false,\"pivot_id\":\"prometheus.labels.instance.keyword\",\"pivot_label\":\"System\",\"pivot_type\":\"string\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"color_rules\":[{\"id\":\"62f81440-6e91-11ea-a9d0-a17b080cb788\"}],\"fill\":0.5,\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"label\":\"Chain Height\",\"line_width\":1,\"metrics\":[{\"field\":\"prometheus.metrics.ethereum_blockchain_height\",\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\"}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"b5e0dc60-6e90-11ea-a9d0-a17b080cb788\",\"label\":\"Target Chain Height\",\"line_width\":1,\"metrics\":[{\"field\":\"prometheus.metrics.ethereum_best_known_block_number\",\"id\":\"b5e0dc61-6e90-11ea-a9d0-a17b080cb788\",\"type\":\"max\"}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"c6372470-6e90-11ea-a9d0-a17b080cb788\",\"label\":\"Blocks Behind\",\"line_width\":1,\"metrics\":[{\"field\":\"prometheus.metrics.ethereum_best_known_block_number\",\"id\":\"c6372471-6e90-11ea-a9d0-a17b080cb788\",\"type\":\"max\"},{\"field\":\"prometheus.metrics.ethereum_blockchain_height\",\"id\":\"fdccb9e0-6e90-11ea-a9d0-a17b080cb788\",\"script\":\"\",\"type\":\"max\",\"variables\":[{\"id\":\"0d303d80-6e91-11ea-a9d0-a17b080cb788\"}]},{\"id\":\"086c9af0-6e91-11ea-a9d0-a17b080cb788\",\"script\":\"params.bn - params.bh\",\"type\":\"math\",\"variables\":[{\"field\":\"c6372471-6e90-11ea-a9d0-a17b080cb788\",\"id\":\"158f2f40-6e91-11ea-a9d0-a17b080cb788\",\"name\":\"bn\"},{\"field\":\"fdccb9e0-6e90-11ea-a9d0-a17b080cb788\",\"id\":\"1b3f7bc0-6e91-11ea-a9d0-a17b080cb788\",\"name\":\"bh\"}]}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"3418df60-6e91-11ea-a9d0-a17b080cb788\",\"label\":\"Total Difficulty\",\"line_width\":1,\"metrics\":[{\"field\":\"prometheus.metrics.besu_blockchain_difficulty_total\",\"id\":\"3418df61-6e91-11ea-a9d0-a17b080cb788\",\"type\":\"max\"}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"4d877e20-6e91-11ea-a9d0-a17b080cb788\",\"label\":\"Block Time (5m avg)\",\"line_width\":1,\"metrics\":[{\"field\":\"prometheus.metrics.ethereum_blockchain_height\",\"id\":\"4d87a530-6e91-11ea-a9d0-a17b080cb788\",\"type\":\"max\",\"unit\":\"\"},{\"field\":\"4d87a530-6e91-11ea-a9d0-a17b080cb788\",\"id\":\"ad060e70-6e91-11ea-a9d0-a17b080cb788\",\"type\":\"derivative\",\"unit\":\"5m\"},{\"id\":\"c3918a70-6e91-11ea-a9d0-a17b080cb788\",\"script\":\"1/(params.v/(60*5))\",\"type\":\"math\",\"variables\":[{\"field\":\"ad060e70-6e91-11ea-a9d0-a17b080cb788\",\"id\":\"cb831460-6e91-11ea-a9d0-a17b080cb788\",\"name\":\"v\"}]}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"aeb3f010-6e92-11ea-a9d0-a17b080cb788\",\"label\":\"Peer Count\",\"line_width\":1,\"metrics\":[{\"field\":\"prometheus.metrics.ethereum_peer_count\",\"id\":\"aeb3f011-6e92-11ea-a9d0-a17b080cb788\",\"type\":\"max\"}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"},{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"color_rules\":[{\"id\":\"fcc9ddf0-6e92-11ea-a9d0-a17b080cb788\"}],\"fill\":0.5,\"formatter\":\"number\",\"id\":\"c31fe770-6e92-11ea-a9d0-a17b080cb788\",\"label\":\"% Peer Limit Used\",\"line_width\":1,\"metrics\":[{\"field\":\"prometheus.metrics.ethereum_peer_count\",\"id\":\"c31fe771-6e92-11ea-a9d0-a17b080cb788\",\"metric_agg\":\"max\",\"numerator\":\"*\",\"type\":\"max\"},{\"field\":\"prometheus.metrics.ethereum_peer_limit\",\"id\":\"232226b0-6e93-11ea-a9d0-a17b080cb788\",\"script\":\"\",\"type\":\"max\",\"variables\":[{\"id\":\"35e920a0-6e93-11ea-a9d0-a17b080cb788\"}]},{\"id\":\"3082ae60-6e93-11ea-a9d0-a17b080cb788\",\"script\":\"(params.pc/params.pl)*100\",\"type\":\"math\",\"variables\":[{\"field\":\"c31fe771-6e92-11ea-a9d0-a17b080cb788\",\"id\":\"44041eb0-6e93-11ea-a9d0-a17b080cb788\",\"name\":\"pc\"},{\"field\":\"232226b0-6e93-11ea-a9d0-a17b080cb788\",\"id\":\"523d5320-6e93-11ea-a9d0-a17b080cb788\",\"name\":\"pl\"}]}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"tooltip_mode\":\"show_all\",\"type\":\"table\",\"time_range_mode\":\"entire_time_range\"}}"},"id":"d2a68e00-6e93-11ea-bfa8-6d96ef6462ed","migrationVersion":{"visualization":"7.9.3"},"references":[],"type":"visualization","updated_at":"2021-04-16T01:18:47.506Z","version":"WzU4LDFd"} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"Besu - Block Time (s)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Besu - Block Time (s)\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"prometheus.metrics.ethereum_blockchain_height\"},{\"lag\":20,\"unit\":\"5m\",\"id\":\"24e36c70-6e98-11ea-acc3-ffda4f77507b\",\"type\":\"derivative\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"},{\"script\":\"1/(params.v / (60*5))\",\"id\":\"75c4b9e0-6e99-11ea-acc3-ffda4f77507b\",\"type\":\"math\",\"variables\":[{\"id\":\"7a779390-6e99-11ea-acc3-ffda4f77507b\",\"name\":\"v\",\"field\":\"24e36c70-6e98-11ea-acc3-ffda4f77507b\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"\",\"type\":\"timeseries\",\"terms_field\":\"prometheus.labels.instance.keyword\",\"split_color_mode\":\"rainbow\",\"terms_order_by\":\"_key\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"metricbeat-*\",\"interval\":\"15s\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"besu-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"axis_min\":\"-5\",\"axis_max\":\"10\"},\"aggs\":[]}"},"id":"6ce58ee0-6e89-11ea-9889-13c413ce5c44","migrationVersion":{"visualization":"7.4.2"},"references":[],"type":"visualization","updated_at":"2020-03-31T01:12:35.013Z","version":"WzYsMV0="} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"Besu - Blocks Behind","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Besu - Blocks Behind\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"prometheus.metrics.ethereum_best_known_block_number\"},{\"id\":\"c4ada270-6e89-11ea-8f3a-434df6b6af3f\",\"type\":\"max\",\"field\":\"prometheus.metrics.ethereum_blockchain_height\"},{\"script\":\"abs(params.bn - params.bh)\",\"id\":\"dd11af00-6e89-11ea-8f3a-434df6b6af3f\",\"type\":\"math\",\"variables\":[{\"id\":\"f39032b0-6e89-11ea-8f3a-434df6b6af3f\",\"name\":\"bn\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"},{\"id\":\"f3a9ae20-6e89-11ea-8f3a-434df6b6af3f\",\"name\":\"bh\",\"field\":\"c4ada270-6e89-11ea-8f3a-434df6b6af3f\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"\",\"type\":\"timeseries\",\"terms_field\":\"prometheus.labels.instance.keyword\",\"terms_order_by\":\"_key\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"metricbeat-*\",\"interval\":\"15s\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"besu-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"drop_last_bucket\":0},\"aggs\":[]}"},"id":"94d30120-6e8a-11ea-9889-13c413ce5c44","migrationVersion":{"visualization":"7.4.2"},"references":[],"type":"visualization","updated_at":"2020-03-31T01:12:35.013Z","version":"WzcsMV0="} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"Besu - CPU (%)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Besu - CPU (%)\",\"type\":\"metrics\",\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"besu-*\",\"default_timefield\":\"@timestamp\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"ignore_global_filter\":1,\"index_pattern\":\"metricbeat-*\",\"interval\":\"15s\",\"isModelInvalid\":false,\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"filter\":{\"language\":\"kuery\",\"query\":\"\"},\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"label\":\"\",\"line_width\":1,\"metrics\":[{\"alpha\":0.3,\"beta\":0.1,\"field\":\"prometheus.metrics.process_cpu_seconds_total\",\"gamma\":0.3,\"id\":\"e7fc3c60-6e83-11ea-8f3a-434df6b6af3f\",\"lag\":1,\"model_type\":\"simple\",\"multiplicative\":true,\"period\":1,\"type\":\"max\",\"unit\":\"1m\",\"window\":4},{\"field\":\"e7fc3c60-6e83-11ea-8f3a-434df6b6af3f\",\"id\":\"156c3ef0-6e86-11ea-8f3a-434df6b6af3f\",\"lag\":1,\"type\":\"serial_diff\",\"unit\":\"1m\"},{\"script\":\"(params.v / (60*0.25) ) * 100\",\"id\":\"252f7750-6e9d-11ea-ab8b-79c238265c69\",\"type\":\"math\",\"variables\":[{\"id\":\"2954de10-6e9d-11ea-ab8b-79c238265c69\",\"name\":\"v\",\"field\":\"156c3ef0-6e86-11ea-8f3a-434df6b6af3f\"}]}],\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"rainbow\",\"split_mode\":\"terms\",\"stacked\":\"none\",\"terms_field\":\"prometheus.labels.instance.keyword\",\"terms_order_by\":\"_key\",\"type\":\"timeseries\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":\"@timestamp\",\"type\":\"timeseries\"},\"aggs\":[]}"},"id":"7e0229a0-6e88-11ea-9889-13c413ce5c44","migrationVersion":{"visualization":"7.4.2"},"references":[],"type":"visualization","updated_at":"2020-03-31T01:12:35.013Z","version":"WzgsMV0="} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"Besu - GC time (%)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Besu - GC time (%)\",\"type\":\"metrics\",\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"max\",\"field\":\"prometheus.metrics.jvm_gc_collection_seconds_sum\"},{\"unit\":\"1m\",\"id\":\"04071820-6ef8-11ea-93af-0b83322032b7\",\"type\":\"derivative\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"label\":\"\",\"type\":\"timeseries\",\"terms_field\":\"prometheus.labels.instance.keyword\",\"terms_order_by\":\"_key\"}],\"time_field\":\"@timestamp\",\"index_pattern\":\"metricbeat-*\",\"interval\":\"15s\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"default_index_pattern\":\"besu-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false},\"aggs\":[]}"},"id":"35cccb20-6ef8-11ea-bdf3-e9d6e133f642","migrationVersion":{"visualization":"7.4.2"},"references":[],"type":"visualization","updated_at":"2020-03-31T01:12:35.013Z","version":"WzksMV0="} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{}"},"title":"Besu - Memory Used (MB)","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Besu - Memory Used (MB)\",\"type\":\"timelion\",\"params\":{\"expression\":\".es(index=metricbeat-*,metric=max:prometheus.metrics.jvm_memory_bytes_used,q='_exists_:prometheus.metrics.jvm_memory_bytes_used AND prometheus.labels.area:heap',split=prometheus.labels.instance.keyword:10)\\n.subtract(.es(index=metricbeat-*,metric=max:prometheus.metrics.jvm_memory_bytes_used,q='_exists_:prometheus.metrics.jvm_memory_bytes_used AND prometheus.labels.area:nonheap',split=prometheus.labels.instance.keyword:10))\\n.divide(1000000).label(regex='.*instance.keyword:(.*) > .*', label='$1').lines(fill=1,width=0.5).legend(ne)\\n\\n\\n\",\"interval\":\"1m\"},\"aggs\":[]}"},"id":"85601920-6f17-11ea-bdf3-e9d6e133f642","migrationVersion":{"visualization":"7.4.2"},"references":[],"type":"visualization","updated_at":"2020-03-31T01:36:37.160Z","version":"WzE3LDFd"} +{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"2127e2a0-da75-42d6-a409-8165f0f7c507\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"2127e2a0-da75-42d6-a409-8165f0f7c507\",\"version\":\"7.6.1\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"c5c36312-5775-406c-8860-ea4e5375ebb0\",\"w\":24,\"x\":0,\"y\":15},\"panelIndex\":\"c5c36312-5775-406c-8860-ea4e5375ebb0\",\"version\":\"7.6.1\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"36d4034a-1b0b-407a-a875-7f70ad347050\",\"w\":24,\"x\":24,\"y\":15},\"panelIndex\":\"36d4034a-1b0b-407a-a875-7f70ad347050\",\"version\":\"7.6.1\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":13,\"i\":\"58ebc10f-1030-421c-a9a5-8227098d19c3\",\"w\":48,\"x\":0,\"y\":30},\"panelIndex\":\"58ebc10f-1030-421c-a9a5-8227098d19c3\",\"version\":\"7.6.1\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"c95564e1-7e9e-4134-93cb-9f2b4c417e73\",\"w\":24,\"x\":0,\"y\":43},\"panelIndex\":\"c95564e1-7e9e-4134-93cb-9f2b4c417e73\",\"version\":\"7.6.1\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"6d1fc7dc-d2b7-4c21-b0a0-8eac097f71b5\",\"w\":24,\"x\":24,\"y\":43},\"panelIndex\":\"6d1fc7dc-d2b7-4c21-b0a0-8eac097f71b5\",\"version\":\"7.6.1\",\"panelRefName\":\"panel_5\"}]","timeRestore":false,"title":"Besu - Overview","version":1},"id":"7adefa30-6e94-11ea-bfa8-6d96ef6462ed","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"d2a68e00-6e93-11ea-bfa8-6d96ef6462ed","name":"panel_0","type":"visualization"},{"id":"6ce58ee0-6e89-11ea-9889-13c413ce5c44","name":"panel_1","type":"visualization"},{"id":"94d30120-6e8a-11ea-9889-13c413ce5c44","name":"panel_2","type":"visualization"},{"id":"7e0229a0-6e88-11ea-9889-13c413ce5c44","name":"panel_3","type":"visualization"},{"id":"35cccb20-6ef8-11ea-bdf3-e9d6e133f642","name":"panel_4","type":"visualization"},{"id":"85601920-6f17-11ea-bdf3-e9d6e133f642","name":"panel_5","type":"visualization"}],"type":"dashboard","updated_at":"2020-03-31T01:12:35.013Z","version":"WzExLDFd"} +{"exportedCount":7,"missingRefCount":0,"missingReferences":[]} \ No newline at end of file diff --git a/config/nodes/member1/accountKeystore b/config/nodes/member1/accountKeystore new file mode 100644 index 0000000..e32e66c --- /dev/null +++ b/config/nodes/member1/accountKeystore @@ -0,0 +1 @@ +{"address":"f0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5","crypto":{"cipher":"aes-128-ctr","ciphertext":"f2af258ee3733513333652be19197ae7eace4b5e79a346cf25b02a857e6043f3","cipherparams":{"iv":"587d7faaa6403b8a73273d0ad58dd71f"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"b93c7d69c5bb0a760c3b7fdf791c47896a552c5c977648b392a24d708674dcf3"},"mac":"d83bcb555c92fc5a32ceacabbb6b99f59515ec3986b9fe5995c67e027bd750c8"},"id":"5392d73f-08dd-42b8-bca9-6f6d35c419d9","version":3} diff --git a/config/nodes/member1/accountPassword b/config/nodes/member1/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/member1/accountPrivateKey b/config/nodes/member1/accountPrivateKey new file mode 100644 index 0000000..4c2ae4b --- /dev/null +++ b/config/nodes/member1/accountPrivateKey @@ -0,0 +1 @@ +0x8bbbb1b345af56b560a5b20bd4b0ed1cd8cc9958a16262bc75118453cb546df7 \ No newline at end of file diff --git a/config/nodes/member1/address b/config/nodes/member1/address new file mode 100644 index 0000000..5f84dec --- /dev/null +++ b/config/nodes/member1/address @@ -0,0 +1 @@ +0x13a52aab892e1322e8b52506276363d4754c122e diff --git a/config/nodes/member1/nodekey b/config/nodes/member1/nodekey new file mode 100644 index 0000000..67b6363 --- /dev/null +++ b/config/nodes/member1/nodekey @@ -0,0 +1 @@ +b9a4bd1539c15bcc83fa9078fe89200b6e9e802ae992f13cd83c853f16e8bed4 diff --git a/config/nodes/member1/nodekey.pub b/config/nodes/member1/nodekey.pub new file mode 100644 index 0000000..3f8674e --- /dev/null +++ b/config/nodes/member1/nodekey.pub @@ -0,0 +1 @@ +98496800174b3c73ae33cba59f8f5e686cd488f7897c2edb52e2cf46383d75cd03dbb58dde07185bc0953f98800ca9a89f4b5ef450c5e51292ea08ec6130ee0c diff --git a/config/nodes/member1/tm.key b/config/nodes/member1/tm.key new file mode 100644 index 0000000..2f8c9e6 --- /dev/null +++ b/config/nodes/member1/tm.key @@ -0,0 +1 @@ +{"data":{"bytes":"Wl+xSyXVuuqzpvznOS7dOobhcn4C5auxkFRi7yLtgtA="},"type":"unlocked"} \ No newline at end of file diff --git a/config/nodes/member1/tm.pub b/config/nodes/member1/tm.pub new file mode 100644 index 0000000..e0f5136 --- /dev/null +++ b/config/nodes/member1/tm.pub @@ -0,0 +1 @@ +BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo= \ No newline at end of file diff --git a/config/nodes/member1/tma.key b/config/nodes/member1/tma.key new file mode 100644 index 0000000..59e017c --- /dev/null +++ b/config/nodes/member1/tma.key @@ -0,0 +1 @@ +{"data":{"bytes":"wGEar7J9G0JAgdisp61ZChyrJWeW2QPyKvecjjeVHOY="},"type":"unlocked"} \ No newline at end of file diff --git a/config/nodes/member1/tma.pub b/config/nodes/member1/tma.pub new file mode 100644 index 0000000..eae34e2 --- /dev/null +++ b/config/nodes/member1/tma.pub @@ -0,0 +1 @@ +8SjRHlUBe4hAmTk3KDeJ96RhN+s10xRrHDrxEi1O5W0= \ No newline at end of file diff --git a/config/nodes/member2/accountKeystore b/config/nodes/member2/accountKeystore new file mode 100644 index 0000000..03170fc --- /dev/null +++ b/config/nodes/member2/accountKeystore @@ -0,0 +1 @@ +{"address":"ca843569e3427144cead5e4d5999a3d0ccf92b8e","crypto":{"cipher":"aes-128-ctr","ciphertext":"01d409941ce57b83a18597058033657182ffb10ae15d7d0906b8a8c04c8d1e3a","cipherparams":{"iv":"0bfb6eadbe0ab7ffaac7e1be285fb4e5"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"7b90f455a95942c7c682e0ef080afc2b494ef71e749ba5b384700ecbe6f4a1bf"},"mac":"4cc851f9349972f851d03d75a96383a37557f7c0055763c673e922de55e9e307"},"id":"354e3b35-1fed-407d-a358-889a29111211","version":3} \ No newline at end of file diff --git a/config/nodes/member2/accountPassword b/config/nodes/member2/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/member2/accountPrivateKey b/config/nodes/member2/accountPrivateKey new file mode 100644 index 0000000..152275b --- /dev/null +++ b/config/nodes/member2/accountPrivateKey @@ -0,0 +1 @@ +0x4762e04d10832808a0aebdaa79c12de54afbe006bfffd228b3abcc494fe986f9 \ No newline at end of file diff --git a/config/nodes/member2/address b/config/nodes/member2/address new file mode 100644 index 0000000..c422b1f --- /dev/null +++ b/config/nodes/member2/address @@ -0,0 +1 @@ +0xe090a28b8a9d0a69ec259cb745036d5d1030e3ea diff --git a/config/nodes/member2/nodekey b/config/nodes/member2/nodekey new file mode 100644 index 0000000..5d4b519 --- /dev/null +++ b/config/nodes/member2/nodekey @@ -0,0 +1 @@ +f18166704e19b895c1e2698ebc82b4e007e6d2933f4b31be23662dd0ec602570 diff --git a/config/nodes/member2/nodekey.pub b/config/nodes/member2/nodekey.pub new file mode 100644 index 0000000..c3b9985 --- /dev/null +++ b/config/nodes/member2/nodekey.pub @@ -0,0 +1 @@ +ad2c79c6561bc8212c2e8382611c62e406e767d1f3106c68ca206900f575cb8ba9a8be111c645cd9803701d684454c782c40d2361b000a32ed03d26228b30ec1 diff --git a/config/nodes/member2/tm.key b/config/nodes/member2/tm.key new file mode 100644 index 0000000..d8c61a2 --- /dev/null +++ b/config/nodes/member2/tm.key @@ -0,0 +1 @@ +{"data":{"bytes":"nDFwJNHSiT1gNzKBy9WJvMhmYRkW3TzFUmPsNzR6oFk="},"type":"unlocked"} \ No newline at end of file diff --git a/config/nodes/member2/tm.pub b/config/nodes/member2/tm.pub new file mode 100644 index 0000000..b3600dc --- /dev/null +++ b/config/nodes/member2/tm.pub @@ -0,0 +1 @@ +QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc= \ No newline at end of file diff --git a/config/nodes/member2/tma.key b/config/nodes/member2/tma.key new file mode 100644 index 0000000..5f17e63 --- /dev/null +++ b/config/nodes/member2/tma.key @@ -0,0 +1 @@ +{"data":{"bytes":"rwfJC1kNa8BjPfc+zZXug+it9sdWa0vbdN6pp6IXlAs="},"type":"unlocked"} \ No newline at end of file diff --git a/config/nodes/member2/tma.pub b/config/nodes/member2/tma.pub new file mode 100644 index 0000000..ab13763 --- /dev/null +++ b/config/nodes/member2/tma.pub @@ -0,0 +1 @@ +2T7xkjblN568N1QmPeElTjoeoNT4tkWYOJYxSMDO5i0= \ No newline at end of file diff --git a/config/nodes/member3/accountKeystore b/config/nodes/member3/accountKeystore new file mode 100644 index 0000000..a5ce865 --- /dev/null +++ b/config/nodes/member3/accountKeystore @@ -0,0 +1 @@ +{"address":"0fbdc686b912d7722dc86510934589e0aaf3b55a","crypto":{"cipher":"aes-128-ctr","ciphertext":"6b2c72c6793f3da8185e36536e02f574805e41c18f551f24b58346ef4ecf3640","cipherparams":{"iv":"582f27a739f39580410faa108d5cc59f"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"1a79b0db3f8cb5c2ae4fa6ccb2b5917ce446bd5e42c8d61faeee512b97b4ad4a"},"mac":"cecb44d2797d6946805d5d744ff803805477195fab1d2209eddc3d1158f2e403"},"id":"f7292e90-af71-49af-a5b3-40e8493f4681","version":3} \ No newline at end of file diff --git a/config/nodes/member3/accountPassword b/config/nodes/member3/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/member3/accountPrivateKey b/config/nodes/member3/accountPrivateKey new file mode 100644 index 0000000..fb551bf --- /dev/null +++ b/config/nodes/member3/accountPrivateKey @@ -0,0 +1 @@ +0x61dced5af778942996880120b303fc11ee28cc8e5036d2fdff619b5675ded3f0 \ No newline at end of file diff --git a/config/nodes/member3/address b/config/nodes/member3/address new file mode 100644 index 0000000..f54868f --- /dev/null +++ b/config/nodes/member3/address @@ -0,0 +1 @@ +0x401bdfcd9221cd790e7cd66eece303ed4d4b53b1 diff --git a/config/nodes/member3/nodekey b/config/nodes/member3/nodekey new file mode 100644 index 0000000..1ad0ce2 --- /dev/null +++ b/config/nodes/member3/nodekey @@ -0,0 +1 @@ +4107f0b6bf67a3bc679a15fe36f640415cf4da6a4820affaac89c8b280dfd1b3 diff --git a/config/nodes/member3/nodekey.pub b/config/nodes/member3/nodekey.pub new file mode 100644 index 0000000..06dfaf3 --- /dev/null +++ b/config/nodes/member3/nodekey.pub @@ -0,0 +1 @@ +af19c92deb635bd7720634de9b2e7908208530d6f5e96eee003a8f1799e5be4037957d7e2fdbe3605e3a38dab05c961679c02133a0e624e23a72f7961e8af6ac diff --git a/config/nodes/member3/tm.key b/config/nodes/member3/tm.key new file mode 100644 index 0000000..f949eaf --- /dev/null +++ b/config/nodes/member3/tm.key @@ -0,0 +1 @@ +{"data":{"bytes":"tMxUVR8bX7aq/TbpVHc2QV3SN2iUuExBwefAuFsO0Lg="},"type":"unlocked"} \ No newline at end of file diff --git a/config/nodes/member3/tm.pub b/config/nodes/member3/tm.pub new file mode 100644 index 0000000..4ee9d9f --- /dev/null +++ b/config/nodes/member3/tm.pub @@ -0,0 +1 @@ +1iTZde/ndBHvzhcl7V68x44Vx7pl8nwx9LqnM/AfJUg= \ No newline at end of file diff --git a/config/nodes/member3/tma.key b/config/nodes/member3/tma.key new file mode 100644 index 0000000..2fe948c --- /dev/null +++ b/config/nodes/member3/tma.key @@ -0,0 +1 @@ +{"data":{"bytes":"yLcbICXicELZOnvpkDXB2UkQUiNAMIfsEOsgtFOGkQU="},"type":"unlocked"} \ No newline at end of file diff --git a/config/nodes/member3/tma.pub b/config/nodes/member3/tma.pub new file mode 100644 index 0000000..5766a7c --- /dev/null +++ b/config/nodes/member3/tma.pub @@ -0,0 +1 @@ +3nLS1GSlPs3/AccoZ20WTBrYP/ua5KDlUM1uGrDKHTs= \ No newline at end of file diff --git a/config/nodes/rpcnode/accountKeystore b/config/nodes/rpcnode/accountKeystore new file mode 100644 index 0000000..7170090 --- /dev/null +++ b/config/nodes/rpcnode/accountKeystore @@ -0,0 +1 @@ +{"address":"c9c913c8c3c1cd416d80a0abf475db2062f161f6","crypto":{"cipher":"aes-128-ctr","ciphertext":"ce8e51e64e9f053414616c62b3924536f3f9144638359e2e2eb00e04ad095b0a","cipherparams":{"iv":"648343bce02b158eda9bb2074f8dc601"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"0982402da973d8176315aeae4415b328a7ce4393e217a0c4f45385f1cee9bc3e"},"mac":"5707caff457f930655849293dc1101e13ab32b175fdf5538869a2a3ffc716d8b"},"id":"8d031b90-ab7f-48dc-9b7a-ce41abd7f9c8","version":3} diff --git a/config/nodes/rpcnode/accountPassword b/config/nodes/rpcnode/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/rpcnode/accountPrivateKey b/config/nodes/rpcnode/accountPrivateKey new file mode 100644 index 0000000..5d2f1fe --- /dev/null +++ b/config/nodes/rpcnode/accountPrivateKey @@ -0,0 +1 @@ +0x60bbe10a196a4e71451c0f6e9ec9beab454c2a5ac0542aa5b8b733ff5719fec3 \ No newline at end of file diff --git a/config/nodes/rpcnode/address b/config/nodes/rpcnode/address new file mode 100644 index 0000000..ae6168b --- /dev/null +++ b/config/nodes/rpcnode/address @@ -0,0 +1 @@ +0xdf8b560be949c229c821731554c33ead5e3888a4 diff --git a/config/nodes/rpcnode/nodekey b/config/nodes/rpcnode/nodekey new file mode 100644 index 0000000..ad2f748 --- /dev/null +++ b/config/nodes/rpcnode/nodekey @@ -0,0 +1 @@ +0e93a540518eeb673d94fb496b746008ab56605463cb9212493997f5755124d1 diff --git a/config/nodes/rpcnode/nodekey.pub b/config/nodes/rpcnode/nodekey.pub new file mode 100644 index 0000000..74091ce --- /dev/null +++ b/config/nodes/rpcnode/nodekey.pub @@ -0,0 +1 @@ +86fcc16f4730fbfd238dc17ea552854c0943923bb1d5e886e5601b8d884fb0519060e0023f495dd24ffe60a65660fb7fdcdebfceedd2b3673dfa63658825924b diff --git a/config/nodes/validator1/accountKeystore b/config/nodes/validator1/accountKeystore new file mode 100644 index 0000000..b98da7b --- /dev/null +++ b/config/nodes/validator1/accountKeystore @@ -0,0 +1 @@ +{"address":"ed9d02e382b34818e88b88a309c7fe71e65f419d","crypto":{"cipher":"aes-128-ctr","ciphertext":"4e77046ba3f699e744acb4a89c36a3ea1158a1bd90a076d36675f4c883864377","cipherparams":{"iv":"a8932af2a3c0225ee8e872bc0e462c11"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"8ca49552b3e92f79c51f2cd3d38dfc723412c212e702bd337a3724e8937aff0f"},"mac":"6d1354fef5aa0418389b1a5d1f5ee0050d7273292a1171c51fd02f9ecff55264"},"id":"a65d1ac3-db7e-445d-a1cc-b6c5eeaa05e0","version":3} \ No newline at end of file diff --git a/config/nodes/validator1/accountPassword b/config/nodes/validator1/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/validator1/accountPrivateKey b/config/nodes/validator1/accountPrivateKey new file mode 100644 index 0000000..8bd8bf5 --- /dev/null +++ b/config/nodes/validator1/accountPrivateKey @@ -0,0 +1 @@ +0xe6181caaffff94a09d7e332fc8da9884d99902c7874eb74354bdcadf411929f1 \ No newline at end of file diff --git a/config/nodes/validator1/address b/config/nodes/validator1/address new file mode 100644 index 0000000..185db29 --- /dev/null +++ b/config/nodes/validator1/address @@ -0,0 +1 @@ +0x93917cadbace5dfce132b991732c6cda9bcc5b8a diff --git a/config/nodes/validator1/nodekey b/config/nodes/validator1/nodekey new file mode 100644 index 0000000..b1868f0 --- /dev/null +++ b/config/nodes/validator1/nodekey @@ -0,0 +1 @@ +1a2c4ff0f1b38e2322658dba692816138eb22d002515df1fffca21278f406aa9 diff --git a/config/nodes/validator1/nodekey.pub b/config/nodes/validator1/nodekey.pub new file mode 100644 index 0000000..1993fc4 --- /dev/null +++ b/config/nodes/validator1/nodekey.pub @@ -0,0 +1 @@ +8208a3f344695d44e9cf2c023683cbea7b9343e2f70a5e804bd2c93858e945f8f91439eef96a4ab6c47ff06637d6fbe6472f96de1655a1bee57ea896654f3a22 diff --git a/config/nodes/validator2/accountKeystore b/config/nodes/validator2/accountKeystore new file mode 100644 index 0000000..e926190 --- /dev/null +++ b/config/nodes/validator2/accountKeystore @@ -0,0 +1 @@ +{"address":"b30f304642de3fee4365ed5cd06ea2e69d3fd0ca","crypto":{"cipher":"aes-128-ctr","ciphertext":"cf7f44a86510c497f2a6727f62b8e89c8cd42dbfd8e3377658d659c776c75f30","cipherparams":{"iv":"5d320e3072939817faa2caefdb810239"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"e637b069dacfe77f3a495d8a0d3735544e73973c03e107976545df78e6f04289"},"mac":"e20c97b8ee7d54072b9cfac201d52ef360ecacdbd1f7187e7547b3cd9be00599"},"id":"5bf73d6b-340b-4e9f-a7f3-f9ab41f39726","version":3} diff --git a/config/nodes/validator2/accountPassword b/config/nodes/validator2/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/validator2/accountPrivateKey b/config/nodes/validator2/accountPrivateKey new file mode 100644 index 0000000..36be780 --- /dev/null +++ b/config/nodes/validator2/accountPrivateKey @@ -0,0 +1 @@ +0x5ad8b28507578c429dfa9f178d7f742f4861716ee956eb75648a7dbc5ffe915d \ No newline at end of file diff --git a/config/nodes/validator2/address b/config/nodes/validator2/address new file mode 100644 index 0000000..2a79143 --- /dev/null +++ b/config/nodes/validator2/address @@ -0,0 +1 @@ +0x27a97c9aaf04f18f3014c32e036dd0ac76da5f18 diff --git a/config/nodes/validator2/nodekey b/config/nodes/validator2/nodekey new file mode 100644 index 0000000..11d1deb --- /dev/null +++ b/config/nodes/validator2/nodekey @@ -0,0 +1 @@ +7f9af699dd2bb1af76c90b3f67183dd48abae509c315eb8f2c55301ad90ba978 diff --git a/config/nodes/validator2/nodekey.pub b/config/nodes/validator2/nodekey.pub new file mode 100644 index 0000000..d0bb085 --- /dev/null +++ b/config/nodes/validator2/nodekey.pub @@ -0,0 +1 @@ +b9050e002aa42464e6b07c811a1f9dfec01249af03f67b753e8415420649b184447bb2a784863ccbf327ad9e31aaba803464979dfe6a7facc669151a5fa6ad1b diff --git a/config/nodes/validator3/accountKeystore b/config/nodes/validator3/accountKeystore new file mode 100644 index 0000000..f005baf --- /dev/null +++ b/config/nodes/validator3/accountKeystore @@ -0,0 +1 @@ +{"address":"0886328869e4e1f401e1052a5f4aae8b45f42610","crypto":{"cipher":"aes-128-ctr","ciphertext":"6e0e228b810a88f2cea85c439b005a92bba6220de8cd6ba73a8f7ecd681fde09","cipherparams":{"iv":"5264c2defa48f7f9fa103899acaea021"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"15ef956dab453387ddf7afd6775f3727fb560a77028b5a14d774c3bfff17f101"},"mac":"6ca1d88defee18378789d191ca7b32bbecbd6dd5a6c39427ed45b13c9595edc3"},"id":"734d1189-4e1e-44bf-854a-642485532715","version":3} diff --git a/config/nodes/validator3/accountPassword b/config/nodes/validator3/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/validator3/accountPrivateKey b/config/nodes/validator3/accountPrivateKey new file mode 100644 index 0000000..494f6a6 --- /dev/null +++ b/config/nodes/validator3/accountPrivateKey @@ -0,0 +1 @@ +0xf23f92ed543046498d7616807b18a8f304855cb644df25bc7d0b0b37d8a66019 \ No newline at end of file diff --git a/config/nodes/validator3/address b/config/nodes/validator3/address new file mode 100644 index 0000000..ca82842 --- /dev/null +++ b/config/nodes/validator3/address @@ -0,0 +1 @@ +0xce412f988377e31f4d0ff12d74df73b51c42d0ca diff --git a/config/nodes/validator3/nodekey b/config/nodes/validator3/nodekey new file mode 100644 index 0000000..dab3e90 --- /dev/null +++ b/config/nodes/validator3/nodekey @@ -0,0 +1 @@ +fe006b00c738e7e5af7f7623290ffc83f394741ae6fb6afc6081cab49e1e1a70 diff --git a/config/nodes/validator3/nodekey.pub b/config/nodes/validator3/nodekey.pub new file mode 100644 index 0000000..149efff --- /dev/null +++ b/config/nodes/validator3/nodekey.pub @@ -0,0 +1 @@ +59cf0c623c582fa9b19bdf70fb6bade07f4ae32218dd4d1c7e2c7e65acf87da45cf2ab55d16d27360aafef17622c37c09db60d7680ebcc17b78867f4c05bcaa4 diff --git a/config/nodes/validator4/accountKeystore b/config/nodes/validator4/accountKeystore new file mode 100644 index 0000000..d4f5422 --- /dev/null +++ b/config/nodes/validator4/accountKeystore @@ -0,0 +1 @@ +{"address":"f48de4a0c2939e62891f3c6aca68982975477e45","crypto":{"cipher":"aes-128-ctr","ciphertext":"402a2d8eb1ff6bab713ddb81f68142c4f0113d32e9f0cc8969347a4945cd1e5f","cipherparams":{"iv":"a1f708815212854c0c49081869198dd5"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"a24d95de8680d8d214ae5e9060e919eb563ce513bf63021497e0d218ed68f89d"},"mac":"571164da79472f210caeb45af2b9715fb22eef8d485ce5c6a4e0c52865398ea7"},"id":"d5723032-0a81-46ec-ac34-9d8362e2250c","version":3} diff --git a/config/nodes/validator4/accountPassword b/config/nodes/validator4/accountPassword new file mode 100644 index 0000000..e69de29 diff --git a/config/nodes/validator4/accountPrivateKey b/config/nodes/validator4/accountPrivateKey new file mode 100644 index 0000000..ad652ae --- /dev/null +++ b/config/nodes/validator4/accountPrivateKey @@ -0,0 +1 @@ +0x7f012b2a11fc651c9a73ac13f0a298d89186c23c2c9a0e83206ad6e274ba3fc7 \ No newline at end of file diff --git a/config/nodes/validator4/address b/config/nodes/validator4/address new file mode 100644 index 0000000..ed3d39f --- /dev/null +++ b/config/nodes/validator4/address @@ -0,0 +1 @@ +0x98c1334496614aed49d2e81526d089f7264fed9c diff --git a/config/nodes/validator4/nodekey b/config/nodes/validator4/nodekey new file mode 100644 index 0000000..37b0256 --- /dev/null +++ b/config/nodes/validator4/nodekey @@ -0,0 +1 @@ +8f6ae009cdbbf6e6fa739b91a4483f251bbe89f6570d34856554533b36c93c55 diff --git a/config/nodes/validator4/nodekey.pub b/config/nodes/validator4/nodekey.pub new file mode 100644 index 0000000..d7bc3f5 --- /dev/null +++ b/config/nodes/validator4/nodekey.pub @@ -0,0 +1 @@ +2fd5b5b6ad529f55b71602026d1849d0036f06482368b5812fa793014195d3571b0840dbc4175617de2a12db8f1222c012420d471ae5c0d982118625cae58868 diff --git a/config/prometheus/prometheus.yml b/config/prometheus/prometheus.yml new file mode 100644 index 0000000..66134f3 --- /dev/null +++ b/config/prometheus/prometheus.yml @@ -0,0 +1,136 @@ +# my global config +global: + scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. + evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. + # scrape_timeout is set to the global default (10s). + +# Alertmanager configuration +alerting: +# alertmanagers: +# - static_configs: +# - targets: +# - alertmanager:9093 + +# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. +rule_files: +# - "first_rules.yml" +# - "second_rules.yml" + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + - job_name: validator1 + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ validator1:9545 ] + + - job_name: validator2 + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ validator2:9545 ] + + - job_name: validator3 + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ validator3:9545 ] + + - job_name: validator4 + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ validator4:9545 ] + + - job_name: rpcnode + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ rpcnode:9545 ] + + - job_name: newnode + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ newnode:9545 ] + + - job_name: member1besu + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ member1besu:9545 ] + + - job_name: member2besu + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ member2besu:9545 ] + + - job_name: member3besu + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ member3besu:9545 ] + + - job_name: member1tessera + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ member1tessera:9545 ] + + - job_name: member2tessera + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ member2tessera:9545 ] + + - job_name: member3tessera + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + static_configs: + - targets: [ member3tessera:9545 ] + + # all the nodes override themselves if given the same name + # so we use dns based lookup and, replace labels to + # alter the address from 192.168.x.y:9545 to node:192.168.x.y:9545 so they are easier to see in grafana + - job_name: node + scrape_interval: 15s + scrape_timeout: 10s + metrics_path: /metrics + scheme: http + dns_sd_configs: + - names: + - node + type: 'A' + port: 9545 + relabel_configs: + - source_labels: [__address__] + regex: '(.*)' + target_label: instance + replacement: "node:$1" + diff --git a/config/tessera/Dockerfile b/config/tessera/Dockerfile new file mode 100644 index 0000000..cb95333 --- /dev/null +++ b/config/tessera/Dockerfile @@ -0,0 +1,15 @@ +ARG TESSERA_VERSION=latest + +FROM quorumengineering/tessera:${TESSERA_VERSION} + +# develop uses a debain container, all releases use an alpine container - this allows both to be used for the quickstart +# set the version in ../../.env +RUN if [ -e /sbin/apk ] ; then apk add gettext --no-cache ; else apt-get update && apt-get install -y gettext && rm -rf /var/lib/apt/lists/* ; fi + +ENV JAVA_OPTS="-Dlogback.configurationFile=/data/logback.xml" + +COPY docker-entrypoint.sh /usr/bin/ +COPY data data + +ENTRYPOINT ["docker-entrypoint.sh"] + diff --git a/config/tessera/data/logback.xml b/config/tessera/data/logback.xml new file mode 100644 index 0000000..4e5100c --- /dev/null +++ b/config/tessera/data/logback.xml @@ -0,0 +1,33 @@ + + + + + + + + {"timestamp":"%d{ISO8601}","container":"${hostName}","level":"%level","thread":"%thread","logger":"%logger{36}","message":"%replace(%replace(%msg){'[\r\n]',''}){'"','\\"'}","throwable":"%replace(%replace(%throwable){'[\r\n]',''}){'"','\\"'}"}%n + + + + + /var/log/tessera/tessera-${HOSTNAME}.log + true + true + + {"timestamp":"%d{ISO8601}","container":"${hostName}","level":"%level","thread":"%thread","class":"%c{1}","logger":"%logger{36}","message":"%replace(%msg){'[\r\n]', ''}","throwable":"%replace(%replace(%throwable){'[\r\n]',''}){'"','\\"'}"}%n + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/tessera/data/tessera-config-template.json b/config/tessera/data/tessera-config-template.json new file mode 100644 index 0000000..6a2579e --- /dev/null +++ b/config/tessera/data/tessera-config-template.json @@ -0,0 +1,62 @@ +{ + "mode": "${TESSERA_MODE}", + "useWhiteList": false, + "jdbc": { + "username": "sa", + "password": "", + "url": "jdbc:h2:./data/tm/db;MODE=Oracle;TRACE_LEVEL_SYSTEM_OUT=0", + "autoCreateTables": true + }, + "serverConfigs": [ + { + "app": "ThirdParty", + "enabled": true, + "serverAddress": "http://${HOSTNAME}:9080", + "communicationType": "REST" + }, + { + "app": "Q2T", + "enabled": true, + "serverAddress": "http://${HOSTNAME}:9101", + "sslConfig": { + "tls": "OFF" + }, + "communicationType": "REST" + }, + { + "app": "P2P", + "enabled": true, + "serverAddress": "http://${HOSTNAME}:9000", + "sslConfig": { + "tls": "OFF" + }, + "communicationType": "REST" + } + ], + "peer": [ + { + "url": "http://member1tessera:9000" + }, + { + "url": "http://member2tessera:9000" + }, + { + "url": "http://member3tessera:9000" + } + ], + "keys": { + "passwords": [], + "keyData": [ + { + "privateKeyPath": "/config/keys/tm.key", + "publicKeyPath": "/config/keys/tm.pub" + } + ] + }, + "alwaysSendTo": [], + "bootstrapNode": false, + "features": { + "enableRemoteKeyValidation": false, + "enablePrivacyEnhancements": true + } +} \ No newline at end of file diff --git a/config/tessera/docker-entrypoint.sh b/config/tessera/docker-entrypoint.sh new file mode 100755 index 0000000..9be271c --- /dev/null +++ b/config/tessera/docker-entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +mkdir -p /var/log/tessera/; +mkdir -p /data/tm/; + +envsubst < /data/tessera-config-template.json > /data/tessera-config.json + +cat /data/tessera-config.json + +exec /tessera/bin/tessera \ + -configfile /data/tessera-config.json + diff --git a/configure-docker-desktop-dns.md b/configure-docker-desktop-dns.md new file mode 100644 index 0000000..0af3de2 --- /dev/null +++ b/configure-docker-desktop-dns.md @@ -0,0 +1,51 @@ +# Docker Desktop DNS Configuration + +Since you're using Docker Desktop (default context), you may need to configure DNS in Docker Desktop settings. + +## Steps to Configure DNS in Docker Desktop: + +1. **Open Docker Desktop** + - Click the Docker Desktop icon in your system tray or start menu + +2. **Go to Settings** + - Click the gear icon (⚙️) in the top right + - Or click "Settings" from the Docker Desktop menu + +3. **Navigate to Docker Engine** + - In the left sidebar, click "Docker Engine" + +4. **Add DNS Configuration** + - In the JSON configuration editor, add or update the `dns` field: + ```json + { + "dns": ["8.8.8.8", "8.8.4.4", "1.1.1.1"], + "experimental": false, + "features": { + "buildkit": true + } + } + ``` + - If there's already content, just add the `"dns"` line to the existing JSON + +5. **Apply Changes** + - Click "Apply & Restart" button + - Wait for Docker Desktop to restart + +## Alternative: Test Without Docker Desktop Configuration + +The WSL2 DNS fix we applied should be sufficient. Try running the network first: +```bash +./run.sh +``` + +If you still get DNS errors, then configure Docker Desktop DNS as described above. + +## Verify Configuration + +After configuring, test with: +```bash +docker pull alpine:latest +``` + +If this works, your Docker DNS is properly configured. + diff --git a/dapps/quorumToken/README.md b/dapps/quorumToken/README.md new file mode 100644 index 0000000..3dd0f97 --- /dev/null +++ b/dapps/quorumToken/README.md @@ -0,0 +1,74 @@ +# Using a DApp to interact with the blockchain + +This DApp, uses Hardhat and Ethers.js in combination with a self custodial (also called a user controlled) wallet i.e. Metamask to interact with the chain. As such this process esentially comprises two parts: + +1. Deploy the contract to the chain +2. Use the DApp's interface to send and transact on the chain + +The `dapps/quorumToken` folder is this structured in this manner (only relevant paths shown): + +``` +quorumToken +├── hardhat.config.ts // hardhat network config +├── contracts // sample contracts of which we use the QuorumToken.sol +├── scripts // handy scripts eg: to deploy to a chain +├── test // contract tests +└── frontend // DApp done in next.js + ├── README.md + ├── public + ├── src + ├── styles + ├── tsconfig.json +``` + +# Contracts + +Contracts are written in Solidity and we use the hardhat development environment for testing, deploying etc + +The `hardhat.config.js` specifies the networks, accounts, solidity version etc + +Install dependencies + +``` +npm i +``` + +Compile the contracts and run tests (optional): + +``` +npx run compile +# As you develop contracts you are using the inbuilt `hardhat` network +npx hardhat test +``` + +Deploy contracts with: + +``` +# we specify the network here so the DApp can use the contract, but you can use any network you wish to and remember to connect Metamask to the appropriate network for the DApp +npx hardhat run ./scripts/deploy_quorumtoken.ts --network quickstart +``` + +_Please remember to save the address returned from the deploy as you will need it for the following steps_ + +# DApp + +We have a sample DApp created that uses Next.js, react and ethers to interact with the quickstart network + +``` +cd frontend +npm i +npm run dev +``` + +1. Open up a tab on port 3001 and connect to Metamask. +2. To interact with the DApp you will need to import the test accounts from `hardhat.config.ts` + + For brevity they are the following: + + ``` + 0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63 + 0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3 + 0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f + ``` + +3. When you connect to Metamask, you are presented with a field to input the address of the deployed contract from the previous step. The app will then fetch the contract data and you can then transfer eth to a new another account. diff --git a/dapps/quorumToken/contracts/QuorumToken.sol b/dapps/quorumToken/contracts/QuorumToken.sol new file mode 100644 index 0000000..e8178c1 --- /dev/null +++ b/dapps/quorumToken/contracts/QuorumToken.sol @@ -0,0 +1,12 @@ +//SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract QuorumToken is ERC20 { + constructor(uint256 initialSupply) + ERC20("QuorumToken", "QT") + { + _mint(msg.sender, initialSupply); + } +} diff --git a/dapps/quorumToken/frontend/.eslintrc.json b/dapps/quorumToken/frontend/.eslintrc.json new file mode 100644 index 0000000..bffb357 --- /dev/null +++ b/dapps/quorumToken/frontend/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "next/core-web-vitals" +} diff --git a/dapps/quorumToken/frontend/next.config.js b/dapps/quorumToken/frontend/next.config.js new file mode 100644 index 0000000..a843cbe --- /dev/null +++ b/dapps/quorumToken/frontend/next.config.js @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +} + +module.exports = nextConfig diff --git a/dapps/quorumToken/frontend/package-lock.json b/dapps/quorumToken/frontend/package-lock.json new file mode 100644 index 0000000..0b4e98a --- /dev/null +++ b/dapps/quorumToken/frontend/package-lock.json @@ -0,0 +1,5612 @@ +{ + "name": "webapp", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "webapp", + "version": "0.1.0", + "dependencies": { + "@chakra-ui/react": "^2.8.0", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "ethers": "6.7.1", + "framer-motion": "^10.16.1", + "next": "13.4.19", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "20.5.4", + "@types/react": "18.2.21", + "@types/react-dom": "18.2.7", + "eslint": "8.47.0", + "eslint-config-next": "13.4.19", + "typescript": "5.1.6" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", + "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==" + }, + "node_modules/@babel/code-frame": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "dependencies": { + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/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/code-frame/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/code-frame/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/code-frame/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/code-frame/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/code-frame/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/code-frame/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/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "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/runtime": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", + "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", + "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@chakra-ui/accordion": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/accordion/-/accordion-2.3.0.tgz", + "integrity": "sha512-A4TkRw3Jnt+Fam6dSSJ62rskdrvjF3JGctYcfXlojfFIpHPuIw4pDwfZgNAxlaxWkcj0e7JJKlQ88dnZW+QfFg==", + "dependencies": { + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/alert": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/alert/-/alert-2.2.0.tgz", + "integrity": "sha512-De+BT88iYOu3Con7MxQeICb1SwgAdVdgpHIYjTh3qvGlNXAQjs81rhG0fONXvwW1FIYletvr9DY2Tlg8xJe7tQ==", + "dependencies": { + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/anatomy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/anatomy/-/anatomy-2.2.0.tgz", + "integrity": "sha512-cD8Ms5C8+dFda0LrORMdxiFhAZwOIY1BSlCadz6/mHUIgNdQy13AHPrXiq6qWdMslqVHq10k5zH7xMPLt6kjFg==" + }, + "node_modules/@chakra-ui/avatar": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/avatar/-/avatar-2.3.0.tgz", + "integrity": "sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==", + "dependencies": { + "@chakra-ui/image": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breadcrumb": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/breadcrumb/-/breadcrumb-2.2.0.tgz", + "integrity": "sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==", + "dependencies": { + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/breakpoint-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/breakpoint-utils/-/breakpoint-utils-2.0.8.tgz", + "integrity": "sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + } + }, + "node_modules/@chakra-ui/button": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/button/-/button-2.1.0.tgz", + "integrity": "sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/spinner": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/card": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/card/-/card-2.2.0.tgz", + "integrity": "sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/checkbox": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/checkbox/-/checkbox-2.3.0.tgz", + "integrity": "sha512-fX7M5sQK27aFWoj7vqnPkf1Q3AHmML/5dIRYfm7HEIsZXYH2C1CkM6+dijeSWIk6a0mp0r3el6SNDUti2ehH8g==", + "dependencies": { + "@chakra-ui/form-control": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/visually-hidden": "2.1.0", + "@zag-js/focus-visible": "0.10.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/clickable": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/clickable/-/clickable-2.1.0.tgz", + "integrity": "sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==", + "dependencies": { + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/close-button": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/close-button/-/close-button-2.1.0.tgz", + "integrity": "sha512-KfJcz6UAaR2dDWSIv6UrCGkZQS54Fjl+DEEVOUTJ7gf4KOP4FQZCkv8hqsAB9FeCtnwU43adq2oaw3aZH/Uzew==", + "dependencies": { + "@chakra-ui/icon": "3.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/color-mode": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/color-mode/-/color-mode-2.2.0.tgz", + "integrity": "sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/control-box": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/control-box/-/control-box-2.1.0.tgz", + "integrity": "sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/counter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/counter/-/counter-2.1.0.tgz", + "integrity": "sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==", + "dependencies": { + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/css-reset": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/css-reset/-/css-reset-2.2.0.tgz", + "integrity": "sha512-nn7hjquIrPwCzwI4d/Y4wzM5A5xAeswREOfT8gT0Yd+U+Qnw3pPT8NPLbNJ3DvuOfJaCV6/N5ld/6RRTgYF/sQ==", + "peerDependencies": { + "@emotion/react": ">=10.0.35", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/descendant": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/descendant/-/descendant-3.1.0.tgz", + "integrity": "sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/dom-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/dom-utils/-/dom-utils-2.1.0.tgz", + "integrity": "sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==" + }, + "node_modules/@chakra-ui/editable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/editable/-/editable-3.1.0.tgz", + "integrity": "sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/event-utils": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@chakra-ui/event-utils/-/event-utils-2.0.8.tgz", + "integrity": "sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==" + }, + "node_modules/@chakra-ui/focus-lock": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/focus-lock/-/focus-lock-2.1.0.tgz", + "integrity": "sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "react-focus-lock": "^2.9.4" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/form-control": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/form-control/-/form-control-2.1.0.tgz", + "integrity": "sha512-3QmWG9v6Rx+JOwJP3Wt89+AWZxK0F1NkVAgXP3WVfE9VDXOKFRV/faLT0GEe2V+l7WZHF5PLdEBvKG8Cgw2mkA==", + "dependencies": { + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/hooks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/hooks/-/hooks-2.2.0.tgz", + "integrity": "sha512-GZE64mcr20w+3KbCUPqQJHHmiFnX5Rcp8jS3YntGA4D5X2qU85jka7QkjfBwv/iduZ5Ei0YpCMYGCpi91dhD1Q==", + "dependencies": { + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/utils": "2.0.15", + "compute-scroll-into-view": "1.0.20", + "copy-to-clipboard": "3.3.3" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/icon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/icon/-/icon-3.1.0.tgz", + "integrity": "sha512-t6v0lGCXRbwUJycN8A/nDTuLktMP+LRjKbYJnd2oL6Pm2vOl99XwEQ5cAEyEa4XoseYNEgXiLR+2TfvgfNFvcw==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/image": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/image/-/image-2.1.0.tgz", + "integrity": "sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/input": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/input/-/input-2.1.0.tgz", + "integrity": "sha512-HItI2vq6vupCuixdzof4sIanGdLlszhDtlR5be5z8Nrda1RkXVqI+9CTJPbNsx2nIKEfwPt01pnT9mozoOSMMw==", + "dependencies": { + "@chakra-ui/form-control": "2.1.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/layout": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/layout/-/layout-2.3.0.tgz", + "integrity": "sha512-tp1/Bn+cHn0Q4HWKY62HtOwzhpH1GUA3i5fvs23HEhOEryTps05hyuQVeJ71fLqSs6f1QEIdm+9It+5WCj64vQ==", + "dependencies": { + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/lazy-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/lazy-utils/-/lazy-utils-2.0.5.tgz", + "integrity": "sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==" + }, + "node_modules/@chakra-ui/live-region": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/live-region/-/live-region-2.1.0.tgz", + "integrity": "sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/media-query": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/media-query/-/media-query-3.3.0.tgz", + "integrity": "sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==", + "dependencies": { + "@chakra-ui/breakpoint-utils": "2.0.8", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/menu": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/menu/-/menu-2.2.0.tgz", + "integrity": "sha512-l7HQjriW4JGeCyxDdguAzekwwB+kHGDLxACi0DJNp37sil51SRaN1S1OrneISbOHVpHuQB+KVNgU0rqhoglVew==", + "dependencies": { + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-outside-click": "2.2.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/modal": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/modal/-/modal-2.3.0.tgz", + "integrity": "sha512-S1sITrIeLSf21LJ0Vz8xZhj5fWEud5z5Dl2dmvOEv1ezypgOrCCBdOEnnqCkoEKZDbKvzZWZXWR5791ikLP6+g==", + "dependencies": { + "@chakra-ui/close-button": "2.1.0", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/transition": "2.1.0", + "aria-hidden": "^1.2.2", + "react-remove-scroll": "^2.5.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/number-input": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-input/-/number-input-2.1.0.tgz", + "integrity": "sha512-/gEAzQHhrMA+1rzyCMaN8OkKtUPuER6iA+nloYEYBoT7dH/EoNlRtBkiIQhDp+E4VpgZJ0SK3OVrm9/eBbtHHg==", + "dependencies": { + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/form-control": "2.1.0", + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-interval": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/number-utils": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/number-utils/-/number-utils-2.0.7.tgz", + "integrity": "sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==" + }, + "node_modules/@chakra-ui/object-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/object-utils/-/object-utils-2.1.0.tgz", + "integrity": "sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==" + }, + "node_modules/@chakra-ui/pin-input": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/pin-input/-/pin-input-2.1.0.tgz", + "integrity": "sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==", + "dependencies": { + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/popover": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/popover/-/popover-2.2.0.tgz", + "integrity": "sha512-cTqXdgkU0vgK82AR1nWcC2MJYhEL/y6uTeprvO2+j4o2D0yPrzVMuIZZRl0abrQwiravQyVGEMgA5y0ZLYwbiQ==", + "dependencies": { + "@chakra-ui/close-button": "2.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-animation-state": "2.1.0", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-focus-effect": "2.1.0", + "@chakra-ui/react-use-focus-on-pointer-down": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/popper": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/popper/-/popper-3.1.0.tgz", + "integrity": "sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==", + "dependencies": { + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@popperjs/core": "^2.9.3" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/portal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/portal/-/portal-2.1.0.tgz", + "integrity": "sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/progress": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/progress/-/progress-2.2.0.tgz", + "integrity": "sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/provider": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/provider/-/provider-2.4.0.tgz", + "integrity": "sha512-KJ/TNczpY+EStQXa2Y5PZ+senlBHrY7P+RpBgJLBZLGkQUCS3APw5KvCwgpA0COb2M4AZXCjw+rm+Ko7ontlgA==", + "dependencies": { + "@chakra-ui/css-reset": "2.2.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/system": "2.6.0", + "@chakra-ui/utils": "2.0.15" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/radio": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/radio/-/radio-2.1.0.tgz", + "integrity": "sha512-WiRlSCqKWgy4m9106w4g77kcLYqBxqGhFRO1pTTJp99rxpM6jNadOeK+moEjqj64N9mSz3njEecMJftKKcOYdg==", + "dependencies": { + "@chakra-ui/form-control": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@zag-js/focus-visible": "0.10.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-2.8.0.tgz", + "integrity": "sha512-tV82DaqE4fMbLIWq58BYh4Ol3gAlNEn+qYOzx8bPrZudboEDnboq8aVfSBwWOY++MLWz2Nn7CkT69YRm91e5sg==", + "dependencies": { + "@chakra-ui/accordion": "2.3.0", + "@chakra-ui/alert": "2.2.0", + "@chakra-ui/avatar": "2.3.0", + "@chakra-ui/breadcrumb": "2.2.0", + "@chakra-ui/button": "2.1.0", + "@chakra-ui/card": "2.2.0", + "@chakra-ui/checkbox": "2.3.0", + "@chakra-ui/close-button": "2.1.0", + "@chakra-ui/control-box": "2.1.0", + "@chakra-ui/counter": "2.1.0", + "@chakra-ui/css-reset": "2.2.0", + "@chakra-ui/editable": "3.1.0", + "@chakra-ui/focus-lock": "2.1.0", + "@chakra-ui/form-control": "2.1.0", + "@chakra-ui/hooks": "2.2.0", + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/image": "2.1.0", + "@chakra-ui/input": "2.1.0", + "@chakra-ui/layout": "2.3.0", + "@chakra-ui/live-region": "2.1.0", + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/menu": "2.2.0", + "@chakra-ui/modal": "2.3.0", + "@chakra-ui/number-input": "2.1.0", + "@chakra-ui/pin-input": "2.1.0", + "@chakra-ui/popover": "2.2.0", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/progress": "2.2.0", + "@chakra-ui/provider": "2.4.0", + "@chakra-ui/radio": "2.1.0", + "@chakra-ui/react-env": "3.1.0", + "@chakra-ui/select": "2.1.0", + "@chakra-ui/skeleton": "2.1.0", + "@chakra-ui/skip-nav": "2.1.0", + "@chakra-ui/slider": "2.1.0", + "@chakra-ui/spinner": "2.1.0", + "@chakra-ui/stat": "2.1.0", + "@chakra-ui/stepper": "2.3.0", + "@chakra-ui/styled-system": "2.9.1", + "@chakra-ui/switch": "2.1.0", + "@chakra-ui/system": "2.6.0", + "@chakra-ui/table": "2.1.0", + "@chakra-ui/tabs": "2.2.0", + "@chakra-ui/tag": "3.1.0", + "@chakra-ui/textarea": "2.1.0", + "@chakra-ui/theme": "3.2.0", + "@chakra-ui/theme-utils": "2.0.19", + "@chakra-ui/toast": "7.0.0", + "@chakra-ui/tooltip": "2.3.0", + "@chakra-ui/transition": "2.1.0", + "@chakra-ui/utils": "2.0.15", + "@chakra-ui/visually-hidden": "2.1.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/react-children-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-children-utils/-/react-children-utils-2.0.6.tgz", + "integrity": "sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-context": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-context/-/react-context-2.1.0.tgz", + "integrity": "sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-env": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-env/-/react-env-3.1.0.tgz", + "integrity": "sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==", + "dependencies": { + "@chakra-ui/react-use-safe-layout-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-types/-/react-types-2.0.7.tgz", + "integrity": "sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-animation-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-animation-state/-/react-use-animation-state-2.1.0.tgz", + "integrity": "sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-callback-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-callback-ref/-/react-use-callback-ref-2.1.0.tgz", + "integrity": "sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-controllable-state": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-controllable-state/-/react-use-controllable-state-2.1.0.tgz", + "integrity": "sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-disclosure": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-disclosure/-/react-use-disclosure-2.1.0.tgz", + "integrity": "sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-event-listener": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-event-listener/-/react-use-event-listener-2.1.0.tgz", + "integrity": "sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-focus-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-effect/-/react-use-focus-effect-2.1.0.tgz", + "integrity": "sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-focus-on-pointer-down": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-focus-on-pointer-down/-/react-use-focus-on-pointer-down-2.1.0.tgz", + "integrity": "sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==", + "dependencies": { + "@chakra-ui/react-use-event-listener": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-interval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-interval/-/react-use-interval-2.1.0.tgz", + "integrity": "sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-latest-ref": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-latest-ref/-/react-use-latest-ref-2.1.0.tgz", + "integrity": "sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-merge-refs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-merge-refs/-/react-use-merge-refs-2.1.0.tgz", + "integrity": "sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-outside-click": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-outside-click/-/react-use-outside-click-2.2.0.tgz", + "integrity": "sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-pan-event": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-pan-event/-/react-use-pan-event-2.1.0.tgz", + "integrity": "sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==", + "dependencies": { + "@chakra-ui/event-utils": "2.0.8", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "framesync": "6.1.2" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-previous": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-previous/-/react-use-previous-2.1.0.tgz", + "integrity": "sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-safe-layout-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-safe-layout-effect/-/react-use-safe-layout-effect-2.1.0.tgz", + "integrity": "sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-size": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-size/-/react-use-size-2.1.0.tgz", + "integrity": "sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==", + "dependencies": { + "@zag-js/element-size": "0.10.5" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-timeout": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-timeout/-/react-use-timeout-2.1.0.tgz", + "integrity": "sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==", + "dependencies": { + "@chakra-ui/react-use-callback-ref": "2.1.0" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-use-update-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-use-update-effect/-/react-use-update-effect-2.1.0.tgz", + "integrity": "sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==", + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/react-utils": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@chakra-ui/react-utils/-/react-utils-2.0.12.tgz", + "integrity": "sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==", + "dependencies": { + "@chakra-ui/utils": "2.0.15" + }, + "peerDependencies": { + "react": ">=18" + } + }, + "node_modules/@chakra-ui/select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/select/-/select-2.1.0.tgz", + "integrity": "sha512-6GEjCJNOm1pS9E7XRvodoVOuSFl82Jio3MGWgmcQrLznjJAhIZVMq85vCQqzGpjjfbHys/UctfdJY75Ctas/Jg==", + "dependencies": { + "@chakra-ui/form-control": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/shared-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@chakra-ui/shared-utils/-/shared-utils-2.0.5.tgz", + "integrity": "sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==" + }, + "node_modules/@chakra-ui/skeleton": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skeleton/-/skeleton-2.1.0.tgz", + "integrity": "sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==", + "dependencies": { + "@chakra-ui/media-query": "3.3.0", + "@chakra-ui/react-use-previous": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/skip-nav": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/skip-nav/-/skip-nav-2.1.0.tgz", + "integrity": "sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/slider": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/slider/-/slider-2.1.0.tgz", + "integrity": "sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==", + "dependencies": { + "@chakra-ui/number-utils": "2.0.7", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-callback-ref": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-latest-ref": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-pan-event": "2.1.0", + "@chakra-ui/react-use-size": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/spinner": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/spinner/-/spinner-2.1.0.tgz", + "integrity": "sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/stat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/stat/-/stat-2.1.0.tgz", + "integrity": "sha512-sqx0/AdFFZ80dsiM5owmhtQyYl+zON1r+IY0m70I/ABRVy+I3br06xdUhoaxh3tcP7c0O/BQgb+VCfXa9Y34CA==", + "dependencies": { + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/stepper": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/stepper/-/stepper-2.3.0.tgz", + "integrity": "sha512-q80QX/NLrjJQIlBP1N+Q8GVJb7/HiOpMoK1PlP4denB/KxkU2K8GEjss8U2vklR1XsWJy1fwfj03+66Q78Uk/Q==", + "dependencies": { + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/styled-system": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@chakra-ui/styled-system/-/styled-system-2.9.1.tgz", + "integrity": "sha512-jhYKBLxwOPi9/bQt9kqV3ELa/4CjmNNruTyXlPp5M0v0+pDMUngPp48mVLoskm9RKZGE0h1qpvj/jZ3K7c7t8w==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "csstype": "^3.0.11", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/switch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/switch/-/switch-2.1.0.tgz", + "integrity": "sha512-uWHOaIDQdGh+mszxeppj5aYVepbkSK445KZlJJkfr9Bnr6sythTwM63HSufnVDiTEE4uRqegv9jEjZK2JKA+9A==", + "dependencies": { + "@chakra-ui/checkbox": "2.3.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/system": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/system/-/system-2.6.0.tgz", + "integrity": "sha512-MgAFRz9V1pW0dplwWsB99hx49LCC+LsrkMala7KXcP0OvWdrkjw+iu+voBksO3626+glzgIwlZW113Eja+7JEQ==", + "dependencies": { + "@chakra-ui/color-mode": "2.2.0", + "@chakra-ui/object-utils": "2.1.0", + "@chakra-ui/react-utils": "2.0.12", + "@chakra-ui/styled-system": "2.9.1", + "@chakra-ui/theme-utils": "2.0.19", + "@chakra-ui/utils": "2.0.15", + "react-fast-compare": "3.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0", + "@emotion/styled": "^11.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/table/-/table-2.1.0.tgz", + "integrity": "sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==", + "dependencies": { + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/tabs": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/tabs/-/tabs-2.2.0.tgz", + "integrity": "sha512-ulN7McHZ322qlbJXg8S+IwdN8Axh8q0HzYBOHzSdcnVphEytfv9TsfJhN0Hx5yjkpekAzG5fewn33ZdIpIpKyQ==", + "dependencies": { + "@chakra-ui/clickable": "2.1.0", + "@chakra-ui/descendant": "3.1.0", + "@chakra-ui/lazy-utils": "2.0.5", + "@chakra-ui/react-children-utils": "2.0.6", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-controllable-state": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/react-use-safe-layout-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/tag": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/tag/-/tag-3.1.0.tgz", + "integrity": "sha512-Mn2u828z5HvqEBEG+tUJWe3al5tzN87bK2U0QfThx3+zqWbBCWBSCVfnWRtkNh80m+5a1TekexDAPZqu5G8zdw==", + "dependencies": { + "@chakra-ui/icon": "3.1.0", + "@chakra-ui/react-context": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/textarea": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/textarea/-/textarea-2.1.0.tgz", + "integrity": "sha512-4F7X/lPRsY+sPxYrWGrhh1pBtdnFvVllIOapzAwnjYwsflm+vf6c+9ZgoDWobXsNezJ9fcqN0FTPwaBnDvDQRQ==", + "dependencies": { + "@chakra-ui/form-control": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/theme": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme/-/theme-3.2.0.tgz", + "integrity": "sha512-q9mppdkhmaBnvOT8REr/lVNNBX/prwm50EzObJ+r+ErVhNQDc55gCFmtr+It3xlcCqmOteG6XUdwRCJz8qzOqg==", + "dependencies": { + "@chakra-ui/anatomy": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/theme-tools": "2.1.0" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.8.0" + } + }, + "node_modules/@chakra-ui/theme-tools": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-tools/-/theme-tools-2.1.0.tgz", + "integrity": "sha512-TKv4trAY8q8+DWdZrpSabTd3SZtZrnzFDwUdzhbWBhFEDEVR3fAkRTPpnPDtf1X9w1YErWn3QAcMACVFz4+vkw==", + "dependencies": { + "@chakra-ui/anatomy": "2.2.0", + "@chakra-ui/shared-utils": "2.0.5", + "color2k": "^2.0.0" + }, + "peerDependencies": { + "@chakra-ui/styled-system": ">=2.0.0" + } + }, + "node_modules/@chakra-ui/theme-utils": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@chakra-ui/theme-utils/-/theme-utils-2.0.19.tgz", + "integrity": "sha512-UQ+KvozTN86+0oA80rdQd1a++4rm4ulo+DEabkgwNpkK3yaWsucOxkDQpi2sMIMvw5X0oaWvNBZJuVyK7HdOXg==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.1", + "@chakra-ui/theme": "3.2.0", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/toast": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/toast/-/toast-7.0.0.tgz", + "integrity": "sha512-XQgSnn4DYRgfOBzBvh8GI/AZ7SfrO8wlVSmChfp92Nfmqm7tRDUT9x8ws/iNKAvMRHkhl7fmRjJ39ipeXYrMvA==", + "dependencies": { + "@chakra-ui/alert": "2.2.0", + "@chakra-ui/close-button": "2.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-context": "2.1.0", + "@chakra-ui/react-use-timeout": "2.1.0", + "@chakra-ui/react-use-update-effect": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5", + "@chakra-ui/styled-system": "2.9.1", + "@chakra-ui/theme": "3.2.0" + }, + "peerDependencies": { + "@chakra-ui/system": "2.6.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/tooltip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/tooltip/-/tooltip-2.3.0.tgz", + "integrity": "sha512-2s23f93YIij1qEDwIK//KtEu4LLYOslhR1cUhDBk/WUzyFR3Ez0Ee+HlqlGEGfGe9x77E6/UXPnSAKKdF/cpsg==", + "dependencies": { + "@chakra-ui/dom-utils": "2.1.0", + "@chakra-ui/popper": "3.1.0", + "@chakra-ui/portal": "2.1.0", + "@chakra-ui/react-types": "2.0.7", + "@chakra-ui/react-use-disclosure": "2.1.0", + "@chakra-ui/react-use-event-listener": "2.1.0", + "@chakra-ui/react-use-merge-refs": "2.1.0", + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "framer-motion": ">=4.0.0", + "react": ">=18", + "react-dom": ">=18" + } + }, + "node_modules/@chakra-ui/transition": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/transition/-/transition-2.1.0.tgz", + "integrity": "sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==", + "dependencies": { + "@chakra-ui/shared-utils": "2.0.5" + }, + "peerDependencies": { + "framer-motion": ">=4.0.0", + "react": ">=18" + } + }, + "node_modules/@chakra-ui/utils": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@chakra-ui/utils/-/utils-2.0.15.tgz", + "integrity": "sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==", + "dependencies": { + "@types/lodash.mergewith": "4.6.7", + "css-box-model": "1.2.1", + "framesync": "6.1.2", + "lodash.mergewith": "4.6.2" + } + }, + "node_modules/@chakra-ui/visually-hidden": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chakra-ui/visually-hidden/-/visually-hidden-2.1.0.tgz", + "integrity": "sha512-3OHKqTz78PX7V4qto+a5Y6VvH6TbU3Pg6Z0Z2KnDkOBP3Po8fiz0kk+/OSPzIwdcSsQKiocLi0c1pnnUPdMZPg==", + "peerDependencies": { + "@chakra-ui/system": ">=2.0.0", + "react": ">=18" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/react": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", + "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", + "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" + }, + "node_modules/@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.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.7.0.tgz", + "integrity": "sha512-+HencqxU7CFJnQb7IKtuNBqS6Yx3Tz4kOL8BJXo+JyeiBm5MEX6pO8onXDkjrkCRlfYXS1Axro15ZjVFe9YgsA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "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/js": { + "version": "8.47.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.47.0.tgz", + "integrity": "sha512-P6omY1zv5MItm93kLM8s2vr1HICJH8v0dvddDhysbIuZ+vcjOHg5Zbkf1mTkcmi2JA9oBG2anOkRnW8WJTS8Og==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@next/env": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", + "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz", + "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", + "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", + "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", + "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", + "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", + "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", + "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", + "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", + "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", + "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.3.3.tgz", + "integrity": "sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", + "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==" + }, + "node_modules/@types/lodash.mergewith": { + "version": "4.6.7", + "resolved": "https://registry.npmjs.org/@types/lodash.mergewith/-/lodash.mergewith-4.6.7.tgz", + "integrity": "sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/node": { + "version": "20.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.4.tgz", + "integrity": "sha512-Y9vbIAoM31djQZrPYjpTLo0XlaSwOIsrlfE3LpulZeRblttsLQRFRlBAppW0LOxyT3ALj2M5vU1ucQQayQH3jA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.21.tgz", + "integrity": "sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", + "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "devOptional": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.4.1.tgz", + "integrity": "sha512-610G6KHymg9V7EqOaNBMtD1GgpAmGROsmfHJPXNLCU9bfIuLrkdOygltK784F6Crboyd5tBFayPB7Sf0McrQwg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.4.1", + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/typescript-estree": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.4.1.tgz", + "integrity": "sha512-p/OavqOQfm4/Hdrr7kvacOSFjwQ2rrDVJRPxt/o0TOWdFnjJptnjnZ+sYDR7fi4OimvIuKp+2LCkc+rt9fIW+A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.4.1.tgz", + "integrity": "sha512-zAAopbNuYu++ijY1GV2ylCsQsi3B8QvfPHVqhGdDcbx/NK5lkqMnCGU53amAjccSpk+LfeONxwzUhDzArSfZJg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.4.1.tgz", + "integrity": "sha512-xF6Y7SatVE/OyV93h1xGgfOkHr2iXuo8ip0gbfzaKeGGuKiAnzS+HtVhSPx8Www243bwlW8IF7X0/B62SzFftg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.4.1", + "@typescript-eslint/visitor-keys": "6.4.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.4.1.tgz", + "integrity": "sha512-y/TyRJsbZPkJIZQXrHfdnxVnxyKegnpEvnRGNam7s3TRR2ykGefEWOhaef00/UUN3IZxizS7BTO3svd3lCOJRQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.4.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@zag-js/dom-query": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.10.5.tgz", + "integrity": "sha512-zm6wA5+kqU48it6afNjaUhjVSixKZruTKB23z0V1xBqKbuiLOMMOZ5oK26cTPSXtZ5CPhDNZ2Qk4pliS5n9SVw==" + }, + "node_modules/@zag-js/element-size": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.10.5.tgz", + "integrity": "sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==" + }, + "node_modules/@zag-js/focus-visible": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-0.10.5.tgz", + "integrity": "sha512-EhDHKLutMtvLFCjBjyIY6h1JoJJNXG3KJz7Dj1sh4tj4LWAqo/TqLvgHyUTB29XMHwoslFHDJHKVWmLGMi+ULQ==", + "dependencies": { + "@zag-js/dom-query": "0.10.5" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", + "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true + }, + "node_modules/asynciterator.prototype": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", + "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", + "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001522", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz", + "integrity": "sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "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/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color2k": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/color2k/-/color2k-2.0.2.tgz", + "integrity": "sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w==" + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "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": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-box-model": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz", + "integrity": "sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==", + "dependencies": { + "tiny-invariant": "^1.0.6" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "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/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.13.tgz", + "integrity": "sha512-LK3VGwzvaPWobO8xzXXGRUOGw8Dcjyfk62CsY/wfHN75CwsJPbuypOYJxK6g5RyEL8YDjIWcl6jgd8foO6mmrA==", + "dev": true, + "dependencies": { + "asynciterator.prototype": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.3", + "es-set-tostringtag": "^2.0.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.2.1", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "iterator.prototype": "^1.1.0", + "safe-array-concat": "^1.0.0" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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.47.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.47.0.tgz", + "integrity": "sha512-spUQWrdPt+pRVP1TTJLmfRNJJHHZryFmptzcafwSvHsceV81djHOdnEeDmkdotZyLNjDhrOasNK8nikkoG1O8Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "^8.47.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.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-config-next": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz", + "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "13.4.19", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.31.7", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.0.tgz", + "integrity": "sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/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/eslint-plugin-jsx-a11y": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/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/eslint-plugin-react": { + "version": "7.33.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", + "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.12", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/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/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/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/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/ethers": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", + "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.9.2", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.7.1", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==" + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "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-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "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.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/focus-lock": { + "version": "0.11.6", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-0.11.6.tgz", + "integrity": "sha512-KSuV3ur4gf2KqMNoZx3nXNVhqCkn42GuTYCX4tXPEwf0MjpFQmNMiN6m7dXaUXgIoivL6/65agoUMg4RLS0Vbg==", + "dependencies": { + "tslib": "^2.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "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/framer-motion": { + "version": "10.16.1", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.1.tgz", + "integrity": "sha512-K6TXr5mZtitC/dxQCBdg7xzdN0d5IAIrlaqCPKtIQVdzVPGC0qBuJKXggHX1vjnP5gPOFwB1KbCCTWcnFc3kWg==", + "dependencies": { + "tslib": "^2.4.0" + }, + "optionalDependencies": { + "@emotion/is-prop-valid": "^0.8.2" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/framer-motion/node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/framer-motion/node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "optional": true + }, + "node_modules/framesync": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/framesync/-/framesync-6.1.2.tgz", + "integrity": "sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==", + "dependencies": { + "tslib": "2.4.0" + } + }, + "node_modules/framesync/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "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/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "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-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", + "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/globals": { + "version": "13.21.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", + "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "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==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-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.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "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.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-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.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "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==", + "dev": true + }, + "node_modules/iterator.prototype": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", + "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "has-tostringtag": "^1.0.0", + "reflect.getprototypeof": "^1.0.3" + } + }, + "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/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", + "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/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.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.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + }, + "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/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/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/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "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": { + "version": "13.4.19", + "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", + "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", + "dependencies": { + "@next/env": "13.4.19", + "@swc/helpers": "0.5.1", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001406", + "postcss": "8.4.14", + "styled-jsx": "5.1.1", + "watchpack": "2.4.0", + "zod": "3.21.4" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=16.8.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "13.4.19", + "@next/swc-darwin-x64": "13.4.19", + "@next/swc-linux-arm64-gnu": "13.4.19", + "@next/swc-linux-arm64-musl": "13.4.19", + "@next/swc-linux-x64-gnu": "13.4.19", + "@next/swc-linux-x64-musl": "13.4.19", + "@next/swc-win32-arm64-msvc": "13.4.19", + "@next/swc-win32-ia32-msvc": "13.4.19", + "@next/swc-win32-x64-msvc": "13.4.19" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "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.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.0.tgz", + "integrity": "sha512-70MWG6NfRH9GnbZOikuhPPYzpUpof9iW2J9E4dW7FXTqPNb6rllE6u39SKwwiNh8lCwX3DDb5OgcKGiEBrTTyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.hasown": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", + "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-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==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "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==", + "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/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-clientside-effect": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/react-clientside-effect/-/react-clientside-effect-1.2.6.tgz", + "integrity": "sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==", + "dependencies": { + "@babel/runtime": "^7.12.13" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.1.tgz", + "integrity": "sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg==" + }, + "node_modules/react-focus-lock": { + "version": "2.9.5", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.5.tgz", + "integrity": "sha512-h6vrdgUbsH2HeD5I7I3Cx1PPrmwGuKYICS+kB9m+32X/9xHRrAbxgvaBpG7BFBN9h3tO+C3qX1QAVESmi4CiIA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "focus-lock": "^0.11.6", + "prop-types": "^15.6.2", + "react-clientside-effect": "^1.2.6", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "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-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-remove-scroll": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.6.tgz", + "integrity": "sha512-bO856ad1uDYLefgArk559IzUNeQ6SWH4QnrevIUjH+GczV56giDfl3h0Idptf2oIKxQmd1p9BN25jleKodTALg==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.4", + "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.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "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-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "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/reflect.getprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", + "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.1", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "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/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "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.prototype.matchall": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", + "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/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/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" + }, + "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/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/ts-api-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.2.tgz", + "integrity": "sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "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/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.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "dependencies": { + "tslib": "^2.0.0" + }, + "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/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "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": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.21.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", + "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/dapps/quorumToken/frontend/package.json b/dapps/quorumToken/frontend/package.json new file mode 100644 index 0000000..33cf6d5 --- /dev/null +++ b/dapps/quorumToken/frontend/package.json @@ -0,0 +1,29 @@ +{ + "name": "webapp", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev -p 3001", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@chakra-ui/react": "^2.8.0", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "ethers": "6.7.1", + "framer-motion": "^10.16.1", + "next": "13.4.19", + "react": "18.2.0", + "react-dom": "18.2.0" + }, + "devDependencies": { + "@types/node": "20.5.4", + "@types/react": "18.2.21", + "@types/react-dom": "18.2.7", + "eslint": "8.47.0", + "eslint-config-next": "13.4.19", + "typescript": "5.1.6" + } +} diff --git a/dapps/quorumToken/frontend/public/favicon.svg b/dapps/quorumToken/frontend/public/favicon.svg new file mode 100644 index 0000000..c50fc38 --- /dev/null +++ b/dapps/quorumToken/frontend/public/favicon.svg @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/dapps/quorumToken/frontend/public/next.svg b/dapps/quorumToken/frontend/public/next.svg new file mode 100644 index 0000000..5174b28 --- /dev/null +++ b/dapps/quorumToken/frontend/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dapps/quorumToken/frontend/src/components/Layout.tsx b/dapps/quorumToken/frontend/src/components/Layout.tsx new file mode 100644 index 0000000..058f71a --- /dev/null +++ b/dapps/quorumToken/frontend/src/components/Layout.tsx @@ -0,0 +1,27 @@ +import React, { ReactNode } from 'react' +import { Container, Flex, useColorModeValue, Spacer, Heading, Center, Text } from '@chakra-ui/react' + +interface LayoutProps { + children: React.ReactNode; +} + +export default function Layout({ children }: LayoutProps) { + return ( +
+ + + Quorum Quickstart DApp + + + + + {children} + + +
+ © {new Date().getFullYear()} ConsenSys Software, Inc. All rights reserved. +
+ +
+ ) +} \ No newline at end of file diff --git a/dapps/quorumToken/frontend/src/components/MMAccount.tsx b/dapps/quorumToken/frontend/src/components/MMAccount.tsx new file mode 100644 index 0000000..b0d3e1b --- /dev/null +++ b/dapps/quorumToken/frontend/src/components/MMAccount.tsx @@ -0,0 +1,25 @@ + +import React, {useEffect, useState } from 'react'; +import { Heading, Text, VStack, Box, Button, Input, Spacer, Flex } from '@chakra-ui/react' + +interface MMAccountProps { + balance: string | undefined, + chainId: number | undefined + erc20ContractAddress: string + deployedAddressHandler: any +} + +export default function MMAccount(props:MMAccountProps){ + + return ( + + Account + Details of the account connected to Metamask + Balance of current account (ETH): {props.balance} + ChainId: {props.chainId} + {/* todo: fix formatting here */} + Address that the QuorumToken was deployed to: + + + ) +} \ No newline at end of file diff --git a/dapps/quorumToken/frontend/src/components/quorumToken/QuorumTokenABI.tsx b/dapps/quorumToken/frontend/src/components/quorumToken/QuorumTokenABI.tsx new file mode 100644 index 0000000..199dbb1 --- /dev/null +++ b/dapps/quorumToken/frontend/src/components/quorumToken/QuorumTokenABI.tsx @@ -0,0 +1,14 @@ +// In order to interact with a contract from js, we need the contract's ABI +// Im using a human readable format here, but you can just as easily use the compiled output from HardHat + +export const QuorumTokenABI = [ + // Read-Only Functions + "function balanceOf(address owner) view returns (uint256)", + "function totalSupply() view returns (uint256)", + "function decimals() view returns (uint8)", + "function symbol() view returns (string)", + // Authenticated Functions + "function transfer(address to, uint amount) returns (bool)", + // Events + "event Transfer(address indexed from, address indexed to, uint amount)" +]; \ No newline at end of file diff --git a/dapps/quorumToken/frontend/src/components/quorumToken/ReadQuorumToken.tsx b/dapps/quorumToken/frontend/src/components/quorumToken/ReadQuorumToken.tsx new file mode 100644 index 0000000..d3c1747 --- /dev/null +++ b/dapps/quorumToken/frontend/src/components/quorumToken/ReadQuorumToken.tsx @@ -0,0 +1,88 @@ +import React, {useEffect, useState } from 'react'; +import {Text} from '@chakra-ui/react' +import {QuorumTokenABI as abi} from './QuorumTokenABI' +import {ethers, Contract} from 'ethers' + +declare let window: any; + +interface ReadQuorumTokenProps { + addressContract: string, + currentAccount: string | undefined +} + +export default function ReadQuorumToken(props:ReadQuorumTokenProps){ + const addressContract = props.addressContract + const currentAccount = props.currentAccount + const [totalSupply,setTotalSupply]=useState() + const [symbol,setSymbol]= useState("") + const [balance, setBalance] =useState(undefined) + + useEffect( () => { + if(!window.ethereum) return; + const provider = new ethers.BrowserProvider(window.ethereum); + const erc20:Contract = new ethers.Contract(addressContract, abi, provider); + + provider.getCode(addressContract).then((result:string)=>{ + //check whether it is a contract + if(result === '0x') return + + erc20.symbol().then((result:string)=>{ + setSymbol(result) + }).catch('error', console.error) + erc20.totalSupply().then((result:string)=>{ + setTotalSupply(ethers.formatEther(result)) + }).catch('error', console.error); + + }) + },[]) + + // when currentAccount changes, we call this hook ie useEffect(()=>{ .... },[currentAccount] + // + useEffect(()=>{ + if(!window.ethereum) return + if(!currentAccount) return + + queryTokenBalance(window); + const provider = new ethers.BrowserProvider(window.ethereum); + const erc20:Contract = new ethers.Contract(addressContract, abi, provider); + + // listen for changes on an Ethereum address + console.log(`listening for Transfer...`) + const fromMe = erc20.filters.Transfer(currentAccount, null) + erc20.on(fromMe, (from, to, amount, event) => { + console.log('Transfer|sent', {from, to, amount, event} ) + queryTokenBalance(window) + }) + + const toMe = erc20.filters.Transfer(null, currentAccount) + erc20.on(toMe, (from, to, amount, event) => { + console.log('Transfer|received', {from, to, amount, event} ) + queryTokenBalance(window) + }) + + // remove listener when the component is unmounted + return () => { + erc20.removeAllListeners(toMe) + erc20.removeAllListeners(fromMe) + } + }, [currentAccount]) + + + async function queryTokenBalance(window:any){ + const provider = new ethers.BrowserProvider(window.ethereum); + const erc20:Contract = new ethers.Contract(addressContract, abi, provider); + + erc20.balanceOf(currentAccount) + .then((result:string)=>{ + setBalance(Number(ethers.formatEther(result))) + }).catch((e:Error)=>console.log(e)) + } + + return ( +
+ ERC20 Contract Address: {addressContract} + QuorumToken totalSupply: {totalSupply} {symbol} + QuorumToken in current account: {balance} {symbol} +
+ ) +} diff --git a/dapps/quorumToken/frontend/src/components/quorumToken/TransferQuorumToken.tsx b/dapps/quorumToken/frontend/src/components/quorumToken/TransferQuorumToken.tsx new file mode 100644 index 0000000..916b45e --- /dev/null +++ b/dapps/quorumToken/frontend/src/components/quorumToken/TransferQuorumToken.tsx @@ -0,0 +1,54 @@ +import React, { useEffect, useState } from 'react'; +import { Text, Button, Input , NumberInput, NumberInputField, FormControl, FormLabel } from '@chakra-ui/react'; +import {ethers, Contract} from 'ethers'; +import {QuorumTokenABI as abi} from './QuorumTokenABI'; +import { TransactionResponse,TransactionReceipt } from "@ethersproject/abstract-provider"; + +declare let window: any; + +interface Props { + addressContract: string, + currentAccount: string | undefined +} + +export default function TransferQuorumToken(props:Props){ + const addressContract = props.addressContract + const currentAccount = props.currentAccount + const [amount, setAmount]=useState('100') + const [toAddress, setToAddress]=useState("") + + const handleChange = (value:string) => setAmount(value) + + // https://docs.ethers.org/v6/getting-started/#starting-contracts + async function transfer(event:React.FormEvent) { + event.preventDefault() + // const provider = new ethers.JsonRpcProvider('http://127.0.0.1:8545'); + const provider = new ethers.BrowserProvider(window.ethereum); + const signer = await provider.getSigner(); + const erc20:Contract = new ethers.Contract(addressContract, abi, signer); + + erc20.transfer(toAddress, ethers.parseEther(amount)) + .then((tr: TransactionResponse) => { + console.log(`TransactionResponse TX hash: ${tr.hash}`) + // todo: maybe put this in a modal thing? + tr.wait().then((receipt:TransactionReceipt)=>{console.log("transfer receipt",receipt)}) + }) + .catch((e:Error)=>console.log(e)) + + } + + + return ( +
+ + Amount: + + + + To address: + setToAddress(e.target.value)} my={3}/> + + +
+ ) +} diff --git a/dapps/quorumToken/frontend/src/pages/_app.tsx b/dapps/quorumToken/frontend/src/pages/_app.tsx new file mode 100644 index 0000000..be63e37 --- /dev/null +++ b/dapps/quorumToken/frontend/src/pages/_app.tsx @@ -0,0 +1,19 @@ + +import type { AppProps } from "next/app"; +import { ChakraProvider } from "@chakra-ui/react"; +import "../../styles/globals.css"; +import Layout from '../components/Layout'; + +function MyApp({ Component, pageProps, router }: AppProps) { + + return ( + + Quorum Quickstart DApp + + + + + ) +} + +export default MyApp; diff --git a/dapps/quorumToken/frontend/src/pages/_document.js b/dapps/quorumToken/frontend/src/pages/_document.js new file mode 100644 index 0000000..aed5bc0 --- /dev/null +++ b/dapps/quorumToken/frontend/src/pages/_document.js @@ -0,0 +1,19 @@ +import { ColorModeScript } from "@chakra-ui/react"; +import NextDocument, { Html, Head, Main, NextScript } from "next/document"; + +export default class Document extends NextDocument { + render() { + return ( + + + + + + +
+ + + + ); + } +} diff --git a/dapps/quorumToken/frontend/src/pages/index.tsx b/dapps/quorumToken/frontend/src/pages/index.tsx new file mode 100644 index 0000000..14fbffd --- /dev/null +++ b/dapps/quorumToken/frontend/src/pages/index.tsx @@ -0,0 +1,106 @@ +import type { NextPage } from 'next' +import { Heading, Text, VStack, Box, Button, Input, Spacer, Flex } from '@chakra-ui/react' +import { useState, useEffect} from 'react' +import {ethers} from "ethers" +import ReadQuorumToken from "../components/quorumToken/ReadQuorumToken" +import TransferQuorumToken from "../components/quorumToken/TransferQuorumToken" +import MMAccount from "../components/MMAccount" + +declare let window:any + +export default function Home() { + + const [balance, setBalance] = useState(); + const [currentAccount, setCurrentAccount] = useState(); + const [erc20ContractAddress, setErc20ContractAddress] = useState("0x"); + const [chainId, setChainId] = useState(); + + useEffect( () => { + if(!currentAccount || !ethers.isAddress(currentAccount)) return; + if(!window.ethereum) return; + const provider = new ethers.BrowserProvider(window.ethereum); + provider.getBalance(currentAccount).then((result)=> { + setBalance(ethers.formatEther(result)); + }) + provider.getNetwork().then((result)=>{ + setChainId(ethers.toNumber(result.chainId)); + }) + + },[currentAccount]) + + const onClickConnect = () => { + if(!window.ethereum) { + console.log("please install MetaMask"); + return; + } + + const provider = new ethers.BrowserProvider(window.ethereum); + // MetaMask requires requesting permission to connect users accounts + provider.send("eth_requestAccounts", []) + .then((accounts)=>{ + if(accounts.length>0) setCurrentAccount(accounts[0]) + }) + .catch((e)=>console.log(e)) + } + + const onClickDisconnect = () => { + setBalance(undefined) + setCurrentAccount(undefined) + } + + const deployedAddressHandler = (e: any) => { + setErc20ContractAddress(e.target.value); + } + + return ( + <> + QuorumToken + + + {currentAccount + ? + : + } + + {currentAccount + ? + :<> + } + + {(erc20ContractAddress!="0x") + ? + Read QuorumToken + Query the smart contract info at address provided + + + + :<> + } + + {(erc20ContractAddress!="0x") + ? + Transfer QuorumToken + Interact with the token + + + :<> + } + + + + ) +} diff --git a/dapps/quorumToken/frontend/styles/globals.css b/dapps/quorumToken/frontend/styles/globals.css new file mode 100644 index 0000000..2be8c96 --- /dev/null +++ b/dapps/quorumToken/frontend/styles/globals.css @@ -0,0 +1,21 @@ +:root, +body { + height: 100%; + margin: 0; + padding: 0; + width: 100%; +} + +#__next { + display: flex; + flex: 1; + flex-direction: column; + height: 100%; + width: 100%; +} + +main { + display: flex; + flex: 1; + flex-direction: column; +} \ No newline at end of file diff --git a/dapps/quorumToken/frontend/tsconfig.json b/dapps/quorumToken/frontend/tsconfig.json new file mode 100644 index 0000000..ba4044f --- /dev/null +++ b/dapps/quorumToken/frontend/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "baseUrl": "./src" + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/dapps/quorumToken/hardhat.config.ts b/dapps/quorumToken/hardhat.config.ts new file mode 100644 index 0000000..8336632 --- /dev/null +++ b/dapps/quorumToken/hardhat.config.ts @@ -0,0 +1,41 @@ +// https://hardhat.org/hardhat-runner/docs/config +import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; + +module.exports = { + networks: { + // in built test network to use when developing contracts + hardhat: { + chainId: 1337 + }, + quickstart: { + url: "http://127.0.0.1:8545", + chainId: 1337, + // test accounts only, all good ;) + accounts: [ + "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3", + "0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f" + ] + } + }, + defaultNetwork: "hardhat", + solidity: { + version: "0.8.19", + settings: { + optimizer: { + enabled: true, + runs: 200 + } + } + }, + paths: { + sources: "./contracts", + tests: "./test", + cache: "./cache", + artifacts: "./artifacts" + }, + mocha: { + timeout: 40000 + } +} \ No newline at end of file diff --git a/dapps/quorumToken/package-lock.json b/dapps/quorumToken/package-lock.json new file mode 100644 index 0000000..a134a96 --- /dev/null +++ b/dapps/quorumToken/package-lock.json @@ -0,0 +1,8901 @@ +{ + "name": "chain", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "chain", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "hardhat": "^2.17.1" + }, + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^1.0.0", + "@typechain/ethers-v6": "^0.4.0", + "@typechain/hardhat": "^8.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "ethers": "6.7.1", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.0", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz", + "integrity": "sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==", + "dev": true + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz", + "integrity": "sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==" + }, + "node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz", + "integrity": "sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@chainsafe/ssz": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.9.4.tgz", + "integrity": "sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.4.2", + "case": "^1.6.3" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true, + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "dev": true, + "dependencies": { + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "devOptional": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "devOptional": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/ethereumjs-block": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz", + "integrity": "sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@nomicfoundation/ethereumjs-blockchain": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz", + "integrity": "sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-ethash": "3.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "abstract-level": "^1.0.3", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "level": "^8.0.0", + "lru-cache": "^5.1.1", + "memory-level": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz", + "integrity": "sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==", + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.1", + "crc-32": "^1.2.0" + } + }, + "node_modules/@nomicfoundation/ethereumjs-ethash": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz", + "integrity": "sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "abstract-level": "^1.0.3", + "bigint-crypto-utils": "^3.0.23", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-evm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz", + "integrity": "sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==", + "dependencies": { + "@ethersproject/providers": "^5.7.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz", + "integrity": "sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-statemanager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz", + "integrity": "sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "ethers": "^5.7.1", + "js-sdsl": "^4.1.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/@nomicfoundation/ethereumjs-trie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz", + "integrity": "sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@types/readable-stream": "^2.3.13", + "ethereum-cryptography": "0.1.3", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz", + "integrity": "sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==", + "dependencies": { + "@chainsafe/ssz": "^0.9.2", + "@ethersproject/providers": "^5.7.2", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz", + "integrity": "sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==", + "dependencies": { + "@chainsafe/ssz": "^0.10.0", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/persistent-merkle-tree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz", + "integrity": "sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1" + } + }, + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/@chainsafe/ssz": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@chainsafe/ssz/-/ssz-0.10.2.tgz", + "integrity": "sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==", + "dependencies": { + "@chainsafe/as-sha256": "^0.3.1", + "@chainsafe/persistent-merkle-tree": "^0.5.0" + } + }, + "node_modules/@nomicfoundation/ethereumjs-vm": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz", + "integrity": "sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==", + "dependencies": { + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.2.tgz", + "integrity": "sha512-9Wu9mRtkj0U9ohgXYFbB/RQDa+PcEdyBm2suyEtsJf3PqzZEEjLUZgWnMjlFhATMk/fp3BjmnYVPrwl+gr8oEw==", + "dev": true, + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.4.tgz", + "integrity": "sha512-k9qbLoY7qn6C6Y1LI0gk2kyHXil2Tauj4kGzQ8pgxYXIGw8lWn8tuuL72E11CrlKaXRUvOgF0EXrv/msPI2SbA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.8.tgz", + "integrity": "sha512-MNqQbzUJZnCMIYvlniC3U+kcavz/PhhQSsY90tbEtUyMj/IQqsLwIRZa4ctjABh3Bz0KCh9OXUZ7Yk/d9hr45Q==", + "dev": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-3.0.0.tgz", + "integrity": "sha512-MsteDXd0UagMksqm9KvcFG6gNKYNa3GGNCy73iQ6bEasEgg2v8Qjl6XA5hjs8o5UD5A3153B6W2BIVJ8SxYUtA==", + "dev": true, + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^1.0.0", + "@typechain/ethers-v6": "^0.4.0", + "@typechain/hardhat": "^8.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=12.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.2.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-1.1.1.tgz", + "integrity": "sha512-9QsTYD7pcZaQFEA3tBb/D/oCStYDiEVDN7Dxeo/4SCyHRSm86APypxxdOMEPlGmXsAvd+p1j/dTODcpxb8aztA==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + }, + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dev": true, + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dependencies": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "devOptional": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.4.3.tgz", + "integrity": "sha512-TrxBsyb4ryhaY9keP6RzhFCviWYApcLCIRMPyWaKp2cZZrfaM3QBoxXTnw/eO4+DAY3l+8O0brNW0WgeQeOiDA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.1", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-8.0.3.tgz", + "integrity": "sha512-MytSmJJn+gs7Mqrpt/gWkTCOpOQ6ZDfRrRT2gtZL0rfGe4QrU4x9ZdW15fFbVM/XTa+5EsKiOMYXhRABibNeng==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.4.3", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.1" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", + "integrity": "sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==", + "dev": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.5.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.6.tgz", + "integrity": "sha512-Gi5wRGPbbyOTX+4Y2iULQ27oUPrefaB0PxGQJnfyWN3kvEDGM3mIB5M/gQLmitZf7A9FmLeaqxD3L1CXpm3VKQ==" + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/readable-stream": { + "version": "2.3.15", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.15.tgz", + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "dependencies": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "devOptional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true + }, + "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": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "node_modules/bigint-crypto-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz", + "integrity": "sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browser-level": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.1", + "module-error": "^1.0.2", + "run-parallel-limit": "^1.1.0" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/case": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/case/-/case-1.6.3.tgz", + "integrity": "sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", + "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/classic-level": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.3.0.tgz", + "integrity": "sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==", + "hasInstallScript": true, + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "^2.2.2", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-abstract": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-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/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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/eth-gas-reporter": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", + "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.0.0-beta.146", + "@solidity-parser/parser": "^0.14.0", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^4.0.40", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^7.1.1", + "req-cwd": "^2.0.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/eth-gas-reporter/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "dev": true, + "dependencies": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eth-gas-reporter/node_modules/hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eth-gas-reporter/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eth-gas-reporter/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/eth-gas-reporter/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eth-gas-reporter/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eth-gas-reporter/node_modules/scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/eth-gas-reporter/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dev": true, + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.7.1.tgz", + "integrity": "sha512-qX5kxIFMfg1i+epfgb0xF4WM7IqapIIu50pOJ17aebkxxa4BacW5jFrQRmCJpDEg2ZK2oNtR5QjrQ1WDBF29dA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.9.2", + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.7.1", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "dev": true + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "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.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/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-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" + }, + "node_modules/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-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.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.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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==" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.17.1.tgz", + "integrity": "sha512-1PxRkfjhEzXs/wDxI5YgzYBxNmvzifBTjYzuopwel+vXpAhCudplusJthN5eig0FTs4qbi828DBIITEDh8x9LA==", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/ethereumjs-block": "5.0.1", + "@nomicfoundation/ethereumjs-blockchain": "7.0.1", + "@nomicfoundation/ethereumjs-common": "4.0.1", + "@nomicfoundation/ethereumjs-evm": "2.0.1", + "@nomicfoundation/ethereumjs-rlp": "5.0.1", + "@nomicfoundation/ethereumjs-statemanager": "2.0.1", + "@nomicfoundation/ethereumjs-trie": "6.0.1", + "@nomicfoundation/ethereumjs-tx": "5.0.1", + "@nomicfoundation/ethereumjs-util": "9.0.1", + "@nomicfoundation/ethereumjs-vm": "7.0.1", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.14.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz", + "integrity": "sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==", + "dev": true, + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.3.tgz", + "integrity": "sha512-808ZFYMsIRAjLAu5xkKo0TsbY9LBy9H5MazTKIEHerNkg0ymgilGfBPMR/3G7d/ihGmuK2Hw8S1izY2d3kd3wA==" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "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-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-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.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.4.2.tgz", + "integrity": "sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "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-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "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/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", + "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", + "dependencies": { + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/level" + } + }, + "node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "dependencies": { + "buffer": "^6.0.3", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "node_modules/mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memory-level": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", + "dependencies": { + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-macros": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.2.2.tgz", + "integrity": "sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-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/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "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.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz", + "integrity": "sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==", + "dev": true, + "dependencies": { + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.21.2", + "safe-array-concat": "^1.0.0" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-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-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.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==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/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/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semver": { + "version": "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/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-coverage": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.4.tgz", + "integrity": "sha512-xeHOfBOjdMF6hWTbt42iH4x+7j1Atmrf5OldDPMxI+i/COdExUxszOswD9qqvcBTaLGiOrrpnh9UZjSpt4rBsg==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.16.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "detect-port": "^1.3.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.15", + "mocha": "7.1.2", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.1.tgz", + "integrity": "sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw==", + "dev": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/solidity-coverage/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/solidity-coverage/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/solidity-coverage/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/solidity-coverage/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/solidity-coverage/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/solidity-coverage/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/solidity-coverage/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/solidity-coverage/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/solidity-coverage/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solidity-coverage/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/solidity-coverage/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/solidity-coverage/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/solidity-coverage/node_modules/mocha": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", + "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/solidity-coverage/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/solidity-coverage/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/solidity-coverage/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/solidity-coverage/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/solidity-coverage/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/solidity-coverage/node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "dependencies": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-command-line-args/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-command-line-args/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-command-line-args/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-command-line-args/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-command-line-args/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-command-line-args/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "devOptional": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + }, + "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==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typechain": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.1.tgz", + "integrity": "sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ==", + "dev": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/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": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz", + "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==", + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/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/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, + "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/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/web3-utils": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.1.tgz", + "integrity": "sha512-r6iUUw/uMnNcWXjhRv33Nyrhxq3VGOPBXeSzxhOXIci4SvC/LPTpROY0uTrMX7ztKyODYrHp8WhTkEf+ZnHssw==", + "dev": true, + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereum-cryptography": "^2.1.2", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz", + "integrity": "sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==", + "dev": true, + "dependencies": { + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/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/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + }, + "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==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/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/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/dapps/quorumToken/package.json b/dapps/quorumToken/package.json new file mode 100644 index 0000000..ee77e82 --- /dev/null +++ b/dapps/quorumToken/package.json @@ -0,0 +1,34 @@ +{ + "name": "quorumToken", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "scripts": { + "compile": "npx hardhat compile", + "test": "npx hardhat test", + "deploy-quorumtoken": "npx hardhat run ./scripts/deploy_quorumtoken.ts --network quickstart " + }, + "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "hardhat": "^2.17.1" + }, + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^1.0.0", + "@typechain/ethers-v6": "^0.4.0", + "@typechain/hardhat": "^8.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=16.0.0", + "chai": "^4.2.0", + "ethers": "6.7.1", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.0", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", + "typescript": ">=4.5.0" + } +} diff --git a/dapps/quorumToken/scripts/deploy_quorumtoken.ts b/dapps/quorumToken/scripts/deploy_quorumtoken.ts new file mode 100644 index 0000000..ef3957b --- /dev/null +++ b/dapps/quorumToken/scripts/deploy_quorumtoken.ts @@ -0,0 +1,15 @@ +import { ethers } from "hardhat" + +async function main() { + const initialSupply = ethers.parseEther('10000.0') + const QuorumToken = await ethers.getContractFactory("QuorumToken") + const deploy = await QuorumToken.deploy(initialSupply) + console.log("Contract deploy at: %s", await deploy.getAddress()); +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error) + process.exitCode = 1 +}) \ No newline at end of file diff --git a/dapps/quorumToken/test/QuorumToken.test.ts b/dapps/quorumToken/test/QuorumToken.test.ts new file mode 100644 index 0000000..0eac6e4 --- /dev/null +++ b/dapps/quorumToken/test/QuorumToken.test.ts @@ -0,0 +1,42 @@ +import { + time, + loadFixture, +} from "@nomicfoundation/hardhat-toolbox/network-helpers"; +import { expect } from "chai" +import { ethers } from "hardhat" +import { Signer } from "ethers" + +describe("QuorumToken", function () { + const initialSupply = ethers.parseEther('10000.0') + + // We define a fixture to reuse the same setup in every test. + // ie a fixture is a function that is only ran the first time it is invoked (& a snapshot is made of the hardhat network). + // On all subsequent invocations our fixture won’t be invoked, but rather the snapshot state is reset and loaded + async function deployQuorumTokenFixture() { + // Contracts are deployed using the first signer/account by default + const [owner, otherAccount] = await ethers.getSigners(); + const QuorumToken = await ethers.getContractFactory("QuorumToken") + const quorumToken = await QuorumToken.deploy(initialSupply); + const address = await quorumToken.getAddress(); + return { quorumToken, address, owner, otherAccount }; + } + + describe("Deployment", function () { + it("Should have the correct initial supply", async function () { + const {quorumToken, address} = await loadFixture(deployQuorumTokenFixture); + expect(await quorumToken.totalSupply()).to.equal(initialSupply); + }); + + it("Should token transfer with correct balance", async function () { + const {quorumToken, address, owner, otherAccount} = await loadFixture(deployQuorumTokenFixture); + const amount = ethers.parseEther('200.0') + const accountAddress = await otherAccount.getAddress(); + await expect(async () => quorumToken.transfer(accountAddress,amount)) + .to.changeTokenBalance(quorumToken, otherAccount, amount) + await expect(async () => quorumToken.connect(otherAccount).transfer(await owner.getAddress(),amount)) + .to.changeTokenBalance(quorumToken, owner, amount) + }); + + }); + +}) diff --git a/dapps/quorumToken/tsconfig.json b/dapps/quorumToken/tsconfig.json new file mode 100644 index 0000000..574e785 --- /dev/null +++ b/dapps/quorumToken/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + } +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0e1416e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,327 @@ +x-besu-def: + restart: on-failure + image: hyperledger/besu:${BESU_VERSION:-latest} + env_file: &id001 + - ./config/besu/.env + entrypoint: &id002 + - /bin/bash + - -c + - ' + + cp "/config/${BESU_CONS_ALGO:-QBFT}genesis.json" /config/genesis.json + + + /opt/besu/bin/besu \ + + --config-file=/config/config.toml \ + + --p2p-host=$$(hostname -i) \ + + --rpc-http-api=EEA,WEB3,ETH,NET,TRACE,DEBUG,ADMIN,TXPOOL,PERM,${BESU_CONS_ALGO:-QBFT} + \ + + --rpc-ws-api=EEA,WEB3,ETH,NET,TRACE,DEBUG,ADMIN,TXPOOL,PERM,${BESU_CONS_ALGO:-QBFT} + ; + + ' +x-blockscout-ref: + image: consensys/blockscout:v4.1.5-beta + container_name: blockscout + restart: 'no' + environment: &id005 + - PORT=4000 + - ECTO_USE_SSL=false + - DATABASE_URL=postgresql://postgres:postgres@blockscoutpostgres:5432/postgres?ssl=false + - POSTGRES_PASSWORD=postgres + - POSTGRES_USER=postgres + - NETWORK=quickstart + - NETWORK=Dev Quickstart + - SUBNETWORK=Quorum + - CHAIN_ID=1337 + - COIN=ETH + - ETHEREUM_JSONRPC_VARIANT=besu + - ETHEREUM_JSONRPC_TRANSPORT=http + - ETHEREUM_JSONRPC_HTTP_URL=http://rpcnode:8545 + - ETHEREUM_JSONRPC_TRACE_URL=http://rpcnode:8545 + - ETHEREUM_JSONRPC_WS_URL=ws://rpcnode:8546 + entrypoint: &id006 + - /bin/sh + - -c + - 'cd /opt/app/; + + echo $$MIX_ENV && mix do ecto.create, ecto.migrate; mix phx.server; + + ' + depends_on: &id007 + - blockscoutpostgres + links: &id008 + - blockscoutpostgres + ports: &id009 + - 26000:4000 +x-blockscoutpostgres-ref: + image: postgres:13.6-alpine + restart: on-failure + container_name: blockscoutpostgres + environment: &id010 + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + - POSTGRES_HOST_AUTH_METHOD=trust + volumes: &id011 + - blockscoutpostgres:/var/lib/postgresql/data + ports: &id012 + - 5432 + healthcheck: &id013 + test: + - CMD-SHELL + - pg_isready -U postgres + interval: 5s + timeout: 10s + retries: 5 +x-ethsignerProxy-def: + image: consensys/ethsigner:${ETHSIGNER_VERSION:-latest} + command: &id004 + - --chain-id=1337 + - --http-listen-host=0.0.0.0 + - --downstream-http-port=8545 + - --downstream-http-host=rpcnode + - file-based-signer + - -k + - /opt/ethsigner/keyfile + - -p + - /opt/ethsigner/passwordfile + ports: + - 8545 +services: + validator1: + restart: on-failure + image: hyperledger/besu:${BESU_VERSION:-latest} + env_file: *id001 + entrypoint: *id002 + ports: + - 21001:8545/tcp + - 30303 + - 9545 + environment: + - OTEL_RESOURCE_ATTRIBUTES=service.name=validator1,service.version=${BESU_VERSION:-latest} + labels: + - consensus=besu + volumes: + - ./config/besu/:/config + - ./config/nodes/validator1:/opt/besu/keys + - ./logs/besu:/tmp/besu + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.11 + dns: &id003 + - 8.8.8.8 + - 8.8.4.4 + - 1.1.1.1 + validator2: + restart: on-failure + image: hyperledger/besu:${BESU_VERSION:-latest} + env_file: *id001 + entrypoint: *id002 + ports: + - 21002:8545/tcp + - 30303 + - 9545 + environment: + - OTEL_RESOURCE_ATTRIBUTES=service.name=validator2,service.version=${BESU_VERSION:-latest} + labels: + - consensus=besu + volumes: + - ./config/besu/:/config + - ./config/nodes/validator2:/opt/besu/keys + - ./logs/besu:/tmp/besu + depends_on: + - validator1 + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.12 + dns: *id003 + validator3: + restart: on-failure + image: hyperledger/besu:${BESU_VERSION:-latest} + env_file: *id001 + entrypoint: *id002 + ports: + - 21003:8545/tcp + - 30303 + - 9545 + environment: + - OTEL_RESOURCE_ATTRIBUTES=service.name=validator3,service.version=${BESU_VERSION:-latest} + labels: + - consensus=besu + volumes: + - ./config/besu/:/config + - ./config/nodes/validator3:/opt/besu/keys + - ./logs/besu:/tmp/besu + depends_on: + - validator1 + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.13 + dns: *id003 + validator4: + restart: on-failure + image: hyperledger/besu:${BESU_VERSION:-latest} + env_file: *id001 + entrypoint: *id002 + ports: + - 21004:8545/tcp + - 30303 + - 9545 + environment: + - OTEL_RESOURCE_ATTRIBUTES=service.name=validator4,service.version=${BESU_VERSION:-latest} + labels: + - consensus=besu + volumes: + - ./config/besu/:/config + - ./config/nodes/validator4:/opt/besu/keys + - ./logs/besu:/tmp/besu + depends_on: + - validator1 + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.14 + dns: *id003 + rpcnode: + restart: on-failure + image: hyperledger/besu:${BESU_VERSION:-latest} + env_file: *id001 + entrypoint: *id002 + container_name: rpcnode + environment: + - OTEL_RESOURCE_ATTRIBUTES=service.name=rpcnode,service.version=${BESU_VERSION:-latest} + volumes: + - ./config/besu/:/config + - ./config/nodes/rpcnode:/opt/besu/keys + - ./logs/besu:/tmp/besu + depends_on: + - validator1 + ports: + - 8545:8545/tcp + - 8546:8546/tcp + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.15 + dns: *id003 + ethsignerProxy: + image: consensys/ethsigner:${ETHSIGNER_VERSION:-latest} + command: *id004 + ports: + - 18545:8545/tcp + volumes: + - ./config/ethsigner/password:/opt/ethsigner/passwordfile + - ./config/ethsigner/key:/opt/ethsigner/keyfile + depends_on: + - validator1 + - rpcnode + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.40 + dns: *id003 + explorer: + image: consensys/quorum-explorer:${QUORUM_EXPLORER_VERSION:-latest} + volumes: + - ./quorum-explorer/config.json:/app/config.json + - ./quorum-explorer/env:/app/.env.production + depends_on: + - rpcnode + ports: + - 25000:25000/tcp + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.31 + dns: *id003 + blockscout: + image: consensys/blockscout:v4.1.5-beta + container_name: blockscout + restart: 'no' + environment: *id005 + entrypoint: *id006 + depends_on: *id007 + links: *id008 + ports: *id009 + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.51 + dns: *id003 + blockscoutpostgres: + image: postgres:13.6-alpine + restart: on-failure + container_name: blockscoutpostgres + environment: *id010 + volumes: *id011 + ports: *id012 + healthcheck: *id013 + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.52 + dns: *id003 + prometheus: + image: prom/prometheus:v2.46.0 + volumes: + - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml + - prometheus:/prometheus + command: + - --config.file=/etc/prometheus/prometheus.yml + ports: + - 9090:9090/tcp + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.32 + dns: *id003 + grafana: + image: grafana/grafana:10.1.0 + environment: + - GF_AUTH_ANONYMOUS_ENABLED=true + - GF_USERS_VIEWERS_CAN_EDIT=true + volumes: + - ./config/grafana/provisioning/:/etc/grafana/provisioning/ + - grafana:/var/lib/grafana + ports: + - 3000:3000/tcp + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.33 + dns: *id003 + loki: + image: grafana/loki:2.8.4 + volumes: + - ./loki/loki.yml:/etc/loki/local-config.yaml + command: -config.file=/etc/loki/local-config.yaml + ports: + - 3100:3100/tcp + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.34 + dns: *id003 + promtail: + image: grafana/promtail:2.8.4 + volumes: + - ./logs:/var/log + - ./promtail/promtail.yml:/etc/promtail/config.yml + command: -config.file=/etc/promtail/config.yml + networks: + quorum-dev-quickstart: + ipv4_address: 172.16.239.35 + dns: *id003 +volumes: + public-keys: null + prometheus: null + grafana: null + splunk: null + ethlogger: null + blockscoutpostgres: null +networks: + quorum-dev-quickstart: + name: quorum-dev-quickstart + driver: bridge + driver_opts: + com.docker.network.driver.mtu: 1500 + ipam: + config: + - subnet: 172.16.239.0/24 + options: + driver: default diff --git a/docker-desktop-dns-config.json b/docker-desktop-dns-config.json new file mode 100644 index 0000000..4b3c19d --- /dev/null +++ b/docker-desktop-dns-config.json @@ -0,0 +1,4 @@ +{ + "dns": ["8.8.8.8", "8.8.4.4", "1.1.1.1"] +} + diff --git a/extra/generate_node_details.js b/extra/generate_node_details.js new file mode 100644 index 0000000..5817935 --- /dev/null +++ b/extra/generate_node_details.js @@ -0,0 +1,68 @@ +const secp256k1 = require('secp256k1') +const keccak = require('keccak') +const { randomBytes } = require('crypto') +const fs = require('fs') +const Wallet = require('ethereumjs-wallet'); +const yargs = require('yargs/yargs'); + +function generatePrivateKey() { + let privKey + do { + privKey = randomBytes(32) + } while (!secp256k1.privateKeyVerify(privKey)) + return privKey +} + +function derivePublicKey(privKey) { + // slice on the end to remove the compression prefix ie. uncompressed use 04 prefix & compressed use 02 or 03 + // we generate the address, which wont work with the compression prefix + let pubKey = secp256k1.publicKeyCreate(privKey, false).slice(1) + return Buffer.from(pubKey) +} + +function deriveAddress(pubKey) { + if(!Buffer.isBuffer(pubKey)) { + console.log("ERROR - pubKey is not a buffer") + } + let keyHash = keccak('keccak256').update(pubKey).digest() + return keyHash.slice(Math.max(keyHash.length - 20, 1)) +} + +function generateNodeData() { + let privateKey = generatePrivateKey() + let publicKey = derivePublicKey(privateKey) + let address = deriveAddress(publicKey) + console.log("keys created, writing to file...") + fs.writeFileSync("nodekey", privateKey.toString('hex')); + fs.writeFileSync("nodekey.pub", publicKey.toString('hex')); + fs.writeFileSync("address", address.toString('hex')); +} + +async function main(password) { + + // generate nodekeys + generateNodeData(); + + // generate account + const wallet = Wallet['default'].generate(); + const v3keystore = await wallet.toV3(password); + console.log("account created, writing to file...") + fs.writeFileSync("accountKeystore", JSON.stringify(v3keystore)); + fs.writeFileSync("accountPrivateKey", wallet.getPrivateKeyString()); + fs.writeFileSync("accountPassword", password); + return { + privateKey: wallet.getPrivateKeyString(), + keystore: JSON.stringify(v3keystore), + password: password + } +} + +try { + const args = yargs(process.argv.slice(2)).options({ + password: { type: 'string', demandOption: false, default: '', describe: 'Password for the account' } + }).argv; + main(args.password); +} catch { + console.error(e) +} + diff --git a/extra/package.json b/extra/package.json new file mode 100644 index 0000000..e9cb187 --- /dev/null +++ b/extra/package.json @@ -0,0 +1,13 @@ +{ + "name": "@consensys-software/generate_node_details", + "version": "1.0.0", + "description": "Example script to create nodekeys and address for a Quorum (Besu or GoQuorum) node", + "scripts": {}, + "license": "Apache-2.0", + "dependencies": { + "secp256k1": "^4.0.0", + "keccak": "^3.0.0", + "ethereumjs-wallet": "^1.0.2", + "yargs": "^17.2.1" + } +} diff --git a/filebeat/Dockerfile b/filebeat/Dockerfile new file mode 100644 index 0000000..2f6233e --- /dev/null +++ b/filebeat/Dockerfile @@ -0,0 +1,12 @@ +FROM docker.elastic.co/beats/filebeat:7.14.1 +ENV ENV_NAME dev +ENV IP_ADDRESS "127.0.0.1" +ENV REDIS_HOST localhost +ENV REDIS_PORT 6379 + +USER root +ADD ./filebeat.yml /usr/share/filebeat/filebeat.yml +RUN chown root:filebeat /usr/share/filebeat/filebeat.yml && chmod go-w /usr/share/filebeat/filebeat.yml +USER filebeat + +CMD ["filebeat", "-c", "filebeat.yml"] diff --git a/filebeat/filebeat.yml b/filebeat/filebeat.yml new file mode 100644 index 0000000..9495dc5 --- /dev/null +++ b/filebeat/filebeat.yml @@ -0,0 +1,66 @@ + +filebeat.modules: + +# List of inputs to fetch data. +filebeat.inputs: + - paths: + - "/var/log/logstash/logstash-*.log" + type: log + enabled: true + document_type: logstash + fields_under_root: true + fields: + service_name: logstash + env_name: ${ENV_NAME} + ip_address: ${IP_ADDRESS} + + - paths: + - "/var/log/besu/*.log" + type: log + enabled: true + document_type: besu + fields_under_root: true + fields: + service_name: besu + env_name: ${ENV_NAME} + ip_address: ${IP_ADDRESS} + + - paths: + - "/var/log/quorum/*.log" + type: log + enabled: true + document_type: quorum + fields_under_root: true + fields: + service_name: quorum + env_name: ${ENV_NAME} + ip_address: ${IP_ADDRESS} + + - paths: + - "/var/log/tessera/*.log" + type: log + enabled: true + document_type: tessera + fields_under_root: true + fields: + service_name: tessera + env_name: ${ENV_NAME} + ip_address: ${IP_ADDRESS} + +output.redis: + enabled: true + hosts: ["${REDIS_HOST}:${REDIS_PORT}"] + key: filebeat + + +logging: + level: error + metrics.enabled: false + to_files: false + json: true + files: + path: /var/log/filebeat + name: filebeat-all.log + keepfiles: 0 + #rotateonstartup: true + diff --git a/fix-dns-now.sh b/fix-dns-now.sh new file mode 100755 index 0000000..bd8dec9 --- /dev/null +++ b/fix-dns-now.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Simple DNS fix that you can run with sudo +# Usage: sudo ./fix-dns-now.sh + +set -e + +if [ "$EUID" -ne 0 ]; then + echo "This script must be run as root (use sudo)" + exit 1 +fi + +echo "Fixing DNS configuration..." + +# Backup existing resolv.conf +if [ -f /etc/resolv.conf ]; then + cp /etc/resolv.conf /etc/resolv.conf.backup.$(date +%Y%m%d_%H%M%S) + echo "✓ Backed up existing resolv.conf" +fi + +# Create new resolv.conf with reliable DNS servers +cat > /etc/resolv.conf < /etc/wsl.conf < /dev/null 2>&1; then + echo "✓ DNS resolution working!" +else + echo "⚠ DNS test failed, but configuration is updated" + echo "You may need to restart WSL or Docker Desktop" +fi + +echo "" +echo "Done! Try running your Docker commands again." +echo "If issues persist, restart Docker Desktop or run: wsl --shutdown (from Windows)" + diff --git a/fix-docker-dns.sh b/fix-docker-dns.sh new file mode 100755 index 0000000..deda5bb --- /dev/null +++ b/fix-docker-dns.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Fix Docker DNS resolution issues in WSL2 +# This script addresses the "dial tcp: lookup registry-1.docker.io" error + +set -e + +echo "==========================================" +echo "Docker DNS Fix for WSL2" +echo "==========================================" + +# Check if running as root +if [ "$EUID" -ne 0 ]; then + echo "Please run as root or with sudo" + echo "Usage: sudo ./fix-docker-dns.sh" + exit 1 +fi + +# Step 1: Fix WSL2 DNS resolution +echo "" +echo "Step 1: Configuring WSL2 DNS..." +if [ ! -f /etc/wsl.conf ]; then + echo "Creating /etc/wsl.conf..." + cat > /etc/wsl.conf < /etc/resolv.conf </dev/null || echo "Note: chattr not available, resolv.conf may be regenerated" + +# Step 2: Configure Docker daemon DNS +echo "" +echo "Step 2: Configuring Docker daemon DNS..." + +# Check if Docker Desktop is being used (common in WSL2) +if command -v docker &> /dev/null; then + DOCKER_CONTEXT=$(docker context show 2>/dev/null || echo "default") + echo "Docker context: $DOCKER_CONTEXT" +fi + +# Create Docker daemon.json directory if it doesn't exist +mkdir -p /etc/docker + +# Backup existing daemon.json if it exists +if [ -f /etc/docker/daemon.json ]; then + cp /etc/docker/daemon.json /etc/docker/daemon.json.backup.$(date +%Y%m%d_%H%M%S) + echo "Backed up existing daemon.json" +fi + +# Create or update daemon.json with DNS configuration +echo "Creating/updating /etc/docker/daemon.json..." +cat > /etc/docker/daemon.json </dev/null; then + echo "Restarting Docker daemon..." + systemctl restart docker + echo "Waiting for Docker to be ready..." + sleep 5 +elif command -v docker &> /dev/null; then + echo "Docker Desktop detected. Please restart Docker Desktop manually." + echo "Or run: wsl --shutdown (from Windows PowerShell) and restart WSL" +fi + +# Step 4: Test DNS resolution +echo "" +echo "Step 4: Testing DNS resolution..." +echo "Testing registry-1.docker.io resolution..." +if nslookup registry-1.docker.io > /dev/null 2>&1; then + echo "✓ DNS resolution working!" +else + echo "⚠ DNS resolution still failing. Trying alternative approach..." + # Try with dig if available + if command -v dig &> /dev/null; then + dig registry-1.docker.io +short || echo "Still failing" + fi +fi + +# Step 5: Test Docker connectivity +echo "" +echo "Step 5: Testing Docker connectivity..." +if command -v docker &> /dev/null; then + echo "Testing Docker pull (dry-run)..." + if docker pull hello-world:latest > /dev/null 2>&1; then + echo "✓ Docker connectivity working!" + else + echo "⚠ Docker pull test failed. This might be normal if images are already cached." + fi +fi + +echo "" +echo "==========================================" +echo "Fix completed!" +echo "==========================================" +echo "" +echo "Next steps:" +echo "1. If using Docker Desktop, restart it from Windows" +echo "2. Or restart WSL: wsl --shutdown (from Windows PowerShell)" +echo "3. Try running your Quorum network again: ./run.sh" +echo "" +echo "If issues persist, try:" +echo " - Check Windows firewall settings" +echo " - Verify internet connectivity" +echo " - Check Docker Desktop settings for network configuration" +echo "" + diff --git a/list.sh b/list.sh new file mode 100755 index 0000000..10c769b --- /dev/null +++ b/list.sh @@ -0,0 +1,99 @@ +#!/bin/bash -eu + +# Copyright 2018 ConsenSys AG. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + +NO_LOCK_REQUIRED=false + +. ./.env +. ./.common.sh +dots="" +maxRetryCount=50 +HOST=${DOCKER_PORT_2375_TCP_ADDR:-"localhost"} + +# Displays links to exposed services +echo "${bold}*************************************" +echo "Quorum Dev Quickstart " +echo "*************************************${normal}" + +elk_setup=true +if [ -z `docker compose -f docker-compose.yml ps -q kibana 2>/dev/null` ] ; then + elk_setup=false +fi +if [ $elk_setup == true ]; then + while [ "$(curl -m 10 -s -o /dev/null -w ''%{http_code}'' http://${HOST}:5601/api/status)" != "200" ] && [ ${#dots} -le ${maxRetryCount} ] + do + dots=$dots"." + printf "Kibana is starting, please wait $dots\\r" + sleep 10 + done + + echo "Setting up the index patterns in kibana ..." + if [ -z `docker ps -q --filter 'label=consensus=goquorum' 2> /dev/null ` ] ; then + curl --silent --output /dev/null -X POST "http://${HOST}:5601/api/saved_objects/index-pattern/besu" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"attributes": {"title": "besu-*","timeFieldName": "@timestamp"}}' + curl --silent --output /dev/null -X POST "http://${HOST}:5601/api/saved_objects/index-pattern/metricbeat" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"attributes": {"title": "metricbeat-*","timeFieldName": "@timestamp"}}' + curl --silent --output /dev/null -X POST "http://${HOST}:5601/api/saved_objects/_import" -H 'kbn-xsrf: true' --form file=@./config/kibana/besu_overview_dashboard.ndjson + else + curl --silent --output /dev/null -X POST "http://${HOST}:5601/api/saved_objects/index-pattern/quorum" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"attributes": {"title": "quorum-*","timeFieldName": "@timestamp"}}' + fi + curl --silent --output /dev/null -X POST "http://${HOST}:5601/api/saved_objects/index-pattern/tessera" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{"attributes": {"title": "tessera-*","timeFieldName": "@timestamp"}}' + +fi + +splunk_setup=true +if [ -z `docker compose -f docker-compose.yml ps -q splunk 2>/dev/null` ] ; then + splunk_setup=false +fi +if [ $splunk_setup == true ]; then + while [ "$(docker inspect --format='{{json .State.Health.Status}}' splunk)" != "\"healthy\"" ] && [ ${#dots} -le ${maxRetryCount} ] + do + dots=$dots"." + printf "Splunk is starting, please wait $dots\\r" + sleep 10 + done +fi + +echo "----------------------------------" +echo "List endpoints and services" +echo "----------------------------------" + +echo "JSON-RPC HTTP service endpoint : http://${HOST}:8545" +echo "JSON-RPC WebSocket service endpoint : ws://${HOST}:8546" +echo "Web block explorer address : http://${HOST}:25000/explorer/nodes" +if [ ! -z `docker compose -f docker-compose.yml ps -q chainlensapi 2> /dev/null` ]; then +echo "Chainlens address : http://${HOST}:8081/" +fi +if [ ! -z `docker compose -f docker-compose.yml ps -q blockscout 2> /dev/null` ]; then +echo "Blockscout address : http://${HOST}:26000/" +fi +if [ ! -z `docker compose -f docker-compose.yml ps -q prometheus 2> /dev/null` ]; then +echo "Prometheus address : http://${HOST}:9090/graph" +fi +grafana_url="http://${HOST}:3000/d/a1lVy7ycin9Yv/goquorum-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All" +grafana_loki_url="http://${HOST}:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=quorum&var-search=" +if [[ ! -z `docker ps -q --filter 'label=consensus=besu' 2> /dev/null ` ]]; then +grafana_url="http://${HOST}:3000/d/XE4V0WGZz/besu-overview?orgId=1&refresh=10s&from=now-30m&to=now&var-system=All" +grafana_loki_url="http://${HOST}:3000/d/Ak6eXLsPxFemKYKEXfcH/quorum-logs-loki?orgId=1&var-app=besu&var-search=" +fi +if [ ! -z `docker compose -f docker-compose.yml ps -q grafana 2> /dev/null` ]; then +echo "Grafana address : $grafana_url" +echo "Collated logs using Grafana and Loki : $grafana_loki_url" +fi + +if [ $elk_setup == true ]; then +echo "Collated logs using Kibana endpoint : http://${HOST}:5601/app/kibana#/discover" +fi +if [ $splunk_setup == true ]; then +echo "Logs, traces and metrics using Splunk endpoint : http://${HOST}:8000/" +fi +echo "" +echo "For more information on the endpoints and services, refer to README.md in the installation directory." +echo "****************************************************************" diff --git a/logstash/Dockerfile b/logstash/Dockerfile new file mode 100644 index 0000000..65824ba --- /dev/null +++ b/logstash/Dockerfile @@ -0,0 +1,18 @@ +FROM docker.elastic.co/logstash/logstash:7.14.1 + +ENV ES_HOST http://localhost:9200 +ENV REDIS_HOST localhost +ENV REDIS_PORT 6379 + +# Remove exisiting file +RUN mkdir -p /usr/share/logstash/logs && \ + rm -f /usr/share/logstash/pipeline/logstash.conf + +# Add pipeline files +ADD pipeline/ /usr/share/logstash/pipeline/ + +# Add configuration files +ADD config/ /usr/share/logstash/config/ + +# Test the configuration +RUN /usr/share/logstash/bin/logstash -t diff --git a/logstash/config/log4j2.properties b/logstash/config/log4j2.properties new file mode 100644 index 0000000..2e6d363 --- /dev/null +++ b/logstash/config/log4j2.properties @@ -0,0 +1,40 @@ +status = trace +name = LogstashPropertiesConfig + +appender.console.type = Console +appender.console.name = plain_console +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c]%notEmpty{[%X{pipeline.id}]}%notEmpty{[%X{plugin.id}]} %m%n + +appender.json_console.type = Console +appender.json_console.name = json_console +appender.json_console.layout.type = JSONLayout +appender.json_console.layout.compact = true +appender.json_console.layout.eventEol = true + +appender.rolling.type = RollingFile +appender.rolling.name = plain_rolling +appender.rolling.fileName = ${sys:ls.logs}/logstash-${env:HOSTNAME}.log +appender.rolling.filePattern = ${sys:ls.logs}/logstash-${env:HOSTNAME}-%d{yyyy-MM-dd}.bak +appender.rolling.policies.type = Policies +appender.rolling.policies.time.type = TimeBasedTriggeringPolicy +appender.rolling.policies.time.interval = 1 +appender.rolling.policies.time.modulate = true +appender.rolling.layout.type = PatternLayout +appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %-.10000m%n + +appender.json_rolling.type = RollingFile +appender.json_rolling.name = json_rolling +appender.json_rolling.fileName = ${sys:ls.logs}/logstash-${env:HOSTNAME}.log +appender.json_rolling.filePattern = ${sys:ls.logs}/logstash-${env:HOSTNAME}-%d{yyyy-MM-dd}.bak +appender.json_rolling.policies.type = Policies +appender.json_rolling.policies.time.type = TimeBasedTriggeringPolicy +appender.json_rolling.policies.time.interval = 1 +appender.json_rolling.policies.time.modulate = true +appender.json_rolling.layout.type = JSONLayout +appender.json_rolling.layout.compact = true +appender.json_rolling.layout.eventEol = true + +rootLogger.level = ${sys:ls.log.level} +rootLogger.appenderRef.console.ref = ${sys:ls.log.format}_console +rootLogger.appenderRef.rolling.ref = ${sys:ls.log.format}_rolling diff --git a/logstash/config/logstash.yml b/logstash/config/logstash.yml new file mode 100644 index 0000000..6d5c7f7 --- /dev/null +++ b/logstash/config/logstash.yml @@ -0,0 +1,13 @@ +# ensure name is set so that monitoring in Kibana is easy to identify +node.name: "logstash-quorum" + +log.format: json +path: + config: /usr/share/logstash/pipeline + logs: /usr/share/logstash/logs + +xpack: + monitoring: + enabled: true + elasticsearch: + hosts: ${ES_HOST} \ No newline at end of file diff --git a/logstash/pipeline/10_filebeat_redis.conf b/logstash/pipeline/10_filebeat_redis.conf new file mode 100644 index 0000000..058aa51 --- /dev/null +++ b/logstash/pipeline/10_filebeat_redis.conf @@ -0,0 +1,9 @@ +input { + redis { + host => "${REDIS_HOST}" + port => "${REDIS_PORT}" + codec => "json" + data_type => "list" + key => "filebeat" + } +} diff --git a/logstash/pipeline/10_metricbeat_redis.conf b/logstash/pipeline/10_metricbeat_redis.conf new file mode 100644 index 0000000..b2bee00 --- /dev/null +++ b/logstash/pipeline/10_metricbeat_redis.conf @@ -0,0 +1,11 @@ +input { + redis { + host => "${REDIS_HOST}" + port => "${REDIS_PORT}" + codec => "json" + data_type => "list" + type => "metricbeat" + key => "metricbeat" + } +} + diff --git a/logstash/pipeline/20_besu.conf b/logstash/pipeline/20_besu.conf new file mode 100644 index 0000000..784f2cb --- /dev/null +++ b/logstash/pipeline/20_besu.conf @@ -0,0 +1,11 @@ +filter { + if [service_name] == "besu" { + json { + source => "message" + } + date { + match => [ "timestamp" , "ISO8601" ] + remove_field => [ "timestamp" ] + } + } +} diff --git a/logstash/pipeline/20_logstash.conf b/logstash/pipeline/20_logstash.conf new file mode 100644 index 0000000..748a552 --- /dev/null +++ b/logstash/pipeline/20_logstash.conf @@ -0,0 +1,11 @@ +filter { + if [service_name] == "logstash" { + json { + source => "message" + } + + date { + match => [ "timeMillis", "UNIX_MS" ] + } + } +} diff --git a/logstash/pipeline/20_quorum.conf b/logstash/pipeline/20_quorum.conf new file mode 100644 index 0000000..688ca9e --- /dev/null +++ b/logstash/pipeline/20_quorum.conf @@ -0,0 +1,21 @@ +filter { + if [service_name] == "quorum" { + grok { + match => { "message" => "%{GREEDYDATA:level}\[%{MONTHNUM:monthnum}\-%{DATA:monthday}\|%{TIME:time}\] %{GREEDYDATA:message}" } + overwrite => [ "message" ] + } + mutate { + add_field => { + "timestamp" => "%{monthnum} %{monthday} %{time}" + } + } + date { + match => [ "timestamp" , "MM dd HH:mm:ss.SSS", "MM dd HH:mm:ss.SSS", "ISO8601"] + remove_field => [ "timestamp" ] + } + mutate { + remove_field => [ "time" ,"month","monthday","year","timestamp"] + } + } +} + diff --git a/logstash/pipeline/20_tessera.conf b/logstash/pipeline/20_tessera.conf new file mode 100644 index 0000000..59a4b96 --- /dev/null +++ b/logstash/pipeline/20_tessera.conf @@ -0,0 +1,11 @@ +filter { + if [service_name] == "tessera" { + json { + source => "message" + } + date { + match => [ "timestamp" , "ISO8601" ] + remove_field => [ "timestamp" ] + } + } +} diff --git a/logstash/pipeline/30_elasticsearch.conf b/logstash/pipeline/30_elasticsearch.conf new file mode 100644 index 0000000..d829937 --- /dev/null +++ b/logstash/pipeline/30_elasticsearch.conf @@ -0,0 +1,44 @@ +output { + if [service_name] == "logstash" { + elasticsearch { + hosts => ["${ES_HOST}"] + index => "logstash-%{+YYYY.MM.dd}" + } + } + + else if [service_name] == "besu" { + elasticsearch { + hosts => ["${ES_HOST}"] + index => "besu-%{+YYYY.MM.dd}" + } + } + + else if [service_name] == "tessera" { + elasticsearch { + hosts => ["${ES_HOST}"] + index => "tessera-%{+YYYY.MM.dd}" + } + } + + else if [service_name] == "quorum" { + elasticsearch { + hosts => ["${ES_HOST}"] + index => "quorum-%{+YYYY.MM.dd}" + } + } + + else if [type] == "metricbeat" { + elasticsearch { + hosts => ["${ES_HOST}"] + index => "metricbeat-%{+YYYY.MM.dd}" + } + } + + else { + elasticsearch { + hosts => ["${ES_HOST}"] + index => "unknown-%{+YYYY.MM.dd}" + } + } + +} diff --git a/loki/loki.yml b/loki/loki.yml new file mode 100644 index 0000000..0d5c252 --- /dev/null +++ b/loki/loki.yml @@ -0,0 +1,31 @@ +auth_enabled: false + +server: + http_listen_port: 3100 + grpc_listen_port: 9096 + +common: + path_prefix: /tmp/loki + storage: + filesystem: + chunks_directory: /tmp/loki/chunks + rules_directory: /tmp/loki/rules + replication_factor: 1 + ring: + instance_addr: 127.0.0.1 + kvstore: + store: inmemory + +schema_config: + configs: + - from: 2021-01-01 + store: boltdb-shipper + object_store: filesystem + schema: v11 + index: + prefix: index_ + period: 24h + +# If you would like to disable reporting, uncomment the following lines: +#analytics: +# reporting_enabled: false \ No newline at end of file diff --git a/metricbeat/Dockerfile b/metricbeat/Dockerfile new file mode 100644 index 0000000..79023c7 --- /dev/null +++ b/metricbeat/Dockerfile @@ -0,0 +1,11 @@ +FROM docker.elastic.co/beats/metricbeat:7.14.1 +ENV IP_ADDRESS "127.0.0.1" +ENV REDIS_HOST localhost +ENV REDIS_PORT 6379 + +USER root +ADD ./metricbeat.yml /usr/share/metricbeat/metricbeat.yml +RUN chown root:metricbeat /usr/share/metricbeat/metricbeat.yml && chmod go-w /usr/share/metricbeat/metricbeat.yml +USER metricbeat + +CMD ["metricbeat", "-c", "metricbeat.yml"] diff --git a/metricbeat/metricbeat.yml b/metricbeat/metricbeat.yml new file mode 100644 index 0000000..a158526 --- /dev/null +++ b/metricbeat/metricbeat.yml @@ -0,0 +1,31 @@ + +metricbeat.modules: +- module: prometheus + period: 15s + hosts: + - validator1:9545 + - validator2:9545 + - validator3:9545 + - validator4:9545 + - rpcnode:9545 + - member1besu:9545 + - member2besu:9545 + - member3besu:9545 + metrics_path: /metrics + +output.redis: + enabled: true + hosts: ["${REDIS_HOST}:${REDIS_PORT}"] + key: metricbeat + + +logging: + level: error + to_files: false + json: true + files: + path: /var/log/metricbeat + name: metricbeat-all.log + keepfiles: 0 + #rotateonstartup: true + diff --git a/promtail/promtail.yml b/promtail/promtail.yml new file mode 100644 index 0000000..6eef205 --- /dev/null +++ b/promtail/promtail.yml @@ -0,0 +1,74 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://loki:3100/loki/api/v1/push + +scrape_configs: + - job_name: besu + pipeline_stages: + - json: + expressions: + timestamp: timestamp + container: container + level: level + class: class + message: message + throwable: throwable + thread: thread + logger: logger + - labels: + container: + level: + - timestamp: + source: timestamp + format: ISO8601 + # - template: + # source: throwable + # template: '{{if .Value }} {{- " | Stack Trace: " -}}{{- .Value -}} {{else}} {{- " " -}} {{end}}' + static_configs: + - targets: + - localhost + labels: + job: besu + __path__: /var/log/besu/*.log + + - job_name: tessera + pipeline_stages: + - json: + expressions: + timestamp: timestamp + container: container + level: level + class: class + message: message + throwable: throwable + thread: thread + logger: logger + - labels: + container: + level: + - timestamp: + source: timestamp + format: ISO8601 + # - template: + # source: throwable + # template: '{{if .Value }} {{- " | Stack Trace: " -}}{{- .Value -}} {{else}} {{- " " -}} {{end}}' + static_configs: + - targets: + - localhost + labels: + job: tessera + __path__: /var/log/tessera/*.log + + - job_name: quorum + static_configs: + - targets: + - localhost + labels: + job: quorum + __path__: /var/log/quorum/*.log diff --git a/quick-dns-fix.sh b/quick-dns-fix.sh new file mode 100755 index 0000000..4d364b3 --- /dev/null +++ b/quick-dns-fix.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# Quick DNS fix for WSL2 Docker connectivity issues +# This is a simpler alternative that doesn't require root + +set -e + +echo "==========================================" +echo "Quick Docker DNS Fix for WSL2" +echo "==========================================" + +# Method 1: Fix WSL2 resolv.conf (requires sudo but is quick) +echo "" +echo "Method 1: Fixing WSL2 DNS configuration..." +if [ "$EUID" -eq 0 ]; then + # Running as root + if [ -f /etc/resolv.conf ]; then + cp /etc/resolv.conf /etc/resolv.conf.backup.$(date +%Y%m%d_%H%M%S) + fi + + cat > /etc/resolv.conf < /etc/resolv.conf'" +fi + +# Method 2: Test DNS resolution +echo "" +echo "Method 2: Testing DNS resolution..." +if nslookup registry-1.docker.io > /dev/null 2>&1 || host registry-1.docker.io > /dev/null 2>&1; then + echo "✓ DNS resolution working!" +else + echo "⚠ DNS resolution still failing" + echo "Try: ping 8.8.8.8 to test basic connectivity" +fi + +# Method 3: Docker Desktop specific fix +echo "" +echo "Method 3: Docker Desktop Configuration" +echo "If using Docker Desktop, configure DNS in Docker Desktop settings:" +echo " 1. Open Docker Desktop" +echo " 2. Go to Settings > Resources > Network" +echo " 3. Or Settings > Docker Engine" +echo " 4. Add DNS configuration:" +echo ' {' +echo ' "dns": ["8.8.8.8", "8.8.4.4", "1.1.1.1"]' +echo ' }' +echo " 5. Click 'Apply & Restart'" + +# Method 4: Alternative - use Docker's built-in DNS +echo "" +echo "Method 4: Testing Docker with explicit DNS..." +if command -v docker &> /dev/null; then + echo "Testing Docker connectivity..." + # Try to pull a small image to test + if docker pull alpine:latest > /dev/null 2>&1; then + echo "✓ Docker connectivity working!" + else + echo "⚠ Docker pull failed. This might indicate network issues." + echo "" + echo "Alternative solutions:" + echo "1. Restart Docker Desktop" + echo "2. Restart WSL: wsl --shutdown (from Windows PowerShell)" + echo "3. Check Windows firewall/antivirus" + echo "4. Try using a VPN or different network" + fi +fi + +echo "" +echo "==========================================" +echo "Quick fix completed!" +echo "==========================================" +echo "" +echo "If issues persist, try the full fix: sudo ./fix-docker-dns.sh" +echo "" + diff --git a/quorum-explorer/config.json b/quorum-explorer/config.json new file mode 100644 index 0000000..fdfeb25 --- /dev/null +++ b/quorum-explorer/config.json @@ -0,0 +1,60 @@ +{ + "algorithm": "qbft", + "nodes": [ + { + "name": "rpcnode", + "client": "besu", + "rpcUrl": "http://rpcnode:8545", + "privateTxUrl": "" + }, + { + "name": "validator1", + "client": "besu", + "rpcUrl": "http://validator1:8545", + "privateTxUrl": "" + }, + { + "name": "validator2", + "client": "besu", + "rpcUrl": "http://validator2:8545", + "privateTxUrl": "" + }, + { + "name": "validator3", + "client": "besu", + "rpcUrl": "http://validator3:8545", + "privateTxUrl": "" + }, + { + "name": "validator4", + "client": "besu", + "rpcUrl": "http://validator4:8545", + "privateTxUrl": "" + }, + { + "name": "member1", + "client": "besu", + "rpcUrl": "http://member1besu:8545", + "privateTxUrl": "http://member1tessera:9080", + "privateKey": "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + "accountAddress": "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73" + }, + { + "name": "member2", + "client": "besu", + "rpcUrl": "http://member2besu:8545", + "privateTxUrl": "http://member2tessera:9080", + "privateKey": "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3", + "accountAddress": "0x627306090abaB3A6e1400e9345bC60c78a8BEf57" + }, + { + "name": "member3", + "client": "besu", + "rpcUrl": "http://member3besu:8545", + "privateTxUrl": "http://member3tessera:9080", + "privateKey": "0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f", + "accountAddress": "0xf17f52151EbEF6C7334FAD080c5704D77216b732" + } + ] +} + diff --git a/quorum-explorer/env b/quorum-explorer/env new file mode 100644 index 0000000..7872f8d --- /dev/null +++ b/quorum-explorer/env @@ -0,0 +1,51 @@ +QE_BASEPATH="/explorer" +QE_CONFIG_PATH="/app/config.json" +NODE_ENV=production + +DISABLE_AUTH=true + +NEXTAUTH_URL=http://localhost:25000 +NEXTAUTH_URL_INTERNAL=http://localhost:25000 +NEXTAUTH_SECRET=68134139e258058cd8c74fc362cec39db176aa17a359e2a63233b9c858947445 +# DO NOT RE-USE THE ABOVE GENERATED IN PRODUCTION +# To generate NEXTAUTH_SECRET: `openssl rand -hex 32` or go to https://generate-secret.now.sh/32; + +local_username= +local_password= + +GITHUB_ID= +GITHUB_SECRET= + +AUTH0_ID= +AUTH0_SECRET= +AUTH0_DOMAIN= + +FACEBOOK_ID= +FACEBOOK_SECRET= + +GOOGLE_ID= +GOOGLE_SECRET= + +TWITTER_ID= +TWITTER_SECRET= + +GITLAB_CLIENT_ID= +GITLAB_CLIENT_SECRET= + +AZURE_AD_CLIENT_ID= +AZURE_AD_CLIENT_SECRET= +AZURE_AD_TENANT_ID= + +ATLASSIAN_CLIENT_ID= +ATLASSIAN_CLIENT_SECRET= + +COGNITO_CLIENT_ID= +COGNITO_CLIENT_SECRET= +COGNITO_ISSUER= + +OKTA_CLIENT_ID= +OKTA_CLIENT_SECRET= +OKTA_ISSUER= + +SLACK_CLIENT_ID= +SLACK_CLIENT_SECRET= diff --git a/remove.sh b/remove.sh new file mode 100755 index 0000000..673d0bf --- /dev/null +++ b/remove.sh @@ -0,0 +1,53 @@ +#!/bin/bash -u + +# Copyright 2018 ConsenSys AG. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + +NO_LOCK_REQUIRED=false + +. ./.env +. ./.common.sh + +removeDockerImage(){ + if [[ ! -z `docker ps -a | grep $1` ]]; then + docker image rm $1 + fi +} + +echo "${bold}*************************************" +echo "Quorum Dev Quickstart " +echo "*************************************${normal}" +echo "Stop and remove network..." + +docker compose down -v +docker compose rm -sfv + +if [ -f "docker-compose-deps.yml" ]; then + echo "Stopping dependencies..." + docker compose -f docker-compose-deps.yml down -v + docker compose rm -sfv +fi +# pet shop dapp +if [[ ! -z `docker ps -a | grep quorum-dev-quickstart_pet_shop` ]]; then + docker stop quorum-dev-quickstart_pet_shop + docker rm quorum-dev-quickstart_pet_shop + removeDockerImage quorum-dev-quickstart_pet_shop +fi + +if grep -q 'kibana:' docker-compose.yml 2> /dev/null ; then + docker image rm quorum-test-network_elasticsearch + docker image rm quorum-test-network_logstash + docker image rm quorum-test-network_filebeat + docker image rm quorum-test-network_metricbeat +fi + +rm ${LOCK_FILE} +echo "Lock file ${LOCK_FILE} removed" diff --git a/restart.sh b/restart.sh new file mode 100755 index 0000000..8b04e54 --- /dev/null +++ b/restart.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +./stop.sh +echo "Waiting 30s for containers to stop" +sleep 30 +./resume.sh diff --git a/resume.sh b/resume.sh new file mode 100755 index 0000000..a3dc013 --- /dev/null +++ b/resume.sh @@ -0,0 +1,32 @@ +#!/bin/bash -u + +# Copyright 2018 ConsenSys AG. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + +NO_LOCK_REQUIRED=false + +. ./.env +. ./.common.sh + +echo "${bold}*************************************" +echo "Quorum Dev Quickstart " +echo "*************************************${normal}" +echo "Resuming network..." +echo "----------------------------------" + +if [ -f "docker-compose-deps.yml" ]; then + echo "Starting dependencies..." + docker compose -f docker-compose-deps.yml start + sleep 60 +fi + +docker compose start + diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..10ee044 --- /dev/null +++ b/run.sh @@ -0,0 +1,43 @@ +#!/bin/bash -u + +# Copyright 2018 ConsenSys AG. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + +NO_LOCK_REQUIRED=true + +. ./.env +. ./.common.sh + +# create log folders with the user permissions so it won't conflict with container permissions +mkdir -p logs/besu logs/quorum logs/tessera + +# Build and run containers and network +echo "docker-compose.yml" > ${LOCK_FILE} + +echo "${bold}*************************************" +echo "Quorum Dev Quickstart" +echo "*************************************${normal}" +echo "Start network" +echo "--------------------" + +if [ -f "docker-compose-deps.yml" ]; then + echo "Starting dependencies..." + docker compose -f docker-compose-deps.yml up --detach + sleep 60 +fi + +echo "Starting network..." +docker compose build --pull +docker compose up --detach + + +#list services and endpoints +./list.sh diff --git a/smart_contracts/contracts/Counter.json b/smart_contracts/contracts/Counter.json new file mode 100644 index 0000000..b62f58e --- /dev/null +++ b/smart_contracts/contracts/Counter.json @@ -0,0 +1,3404 @@ +{ + "abi": [ + { + "inputs": [], + "name": "decrementCounter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getCount", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "incrementCounter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "assembly": " /* \"Counter.sol\":57:318 contract Counter {... */\n mstore(0x40, 0x80)\n /* \"Counter.sol\":100:101 0 */\n 0x00\n /* \"Counter.sol\":80:101 int private count = 0 */\n dup1\n sstore\n /* \"Counter.sol\":57:318 contract Counter {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"Counter.sol\":57:318 contract Counter {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x5b34b966\n eq\n tag_3\n jumpi\n dup1\n 0xa87d942c\n eq\n tag_4\n jumpi\n dup1\n 0xf5c5ad83\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"Counter.sol\":107:169 function incrementCounter() public {... */\n tag_3:\n tag_6\n tag_7\n jump\t// in\n tag_6:\n stop\n /* \"Counter.sol\":241:316 function getCount() public view returns (int) {... */\n tag_4:\n tag_8\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n tag_10\n swap2\n swap1\n tag_11\n jump\t// in\n tag_10:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"Counter.sol\":174:236 function decrementCounter() public {... */\n tag_5:\n tag_12\n tag_13\n jump\t// in\n tag_12:\n stop\n /* \"Counter.sol\":107:169 function incrementCounter() public {... */\n tag_7:\n /* \"Counter.sol\":161:162 1 */\n 0x01\n /* \"Counter.sol\":152:157 count */\n 0x00\n dup1\n /* \"Counter.sol\":152:162 count += 1 */\n dup3\n dup3\n sload\n tag_15\n swap2\n swap1\n tag_16\n jump\t// in\n tag_15:\n swap3\n pop\n pop\n dup2\n swap1\n sstore\n pop\n /* \"Counter.sol\":107:169 function incrementCounter() public {... */\n jump\t// out\n /* \"Counter.sol\":241:316 function getCount() public view returns (int) {... */\n tag_9:\n /* \"Counter.sol\":282:285 int */\n 0x00\n /* \"Counter.sol\":304:309 count */\n dup1\n sload\n /* \"Counter.sol\":297:309 return count */\n swap1\n pop\n /* \"Counter.sol\":241:316 function getCount() public view returns (int) {... */\n swap1\n jump\t// out\n /* \"Counter.sol\":174:236 function decrementCounter() public {... */\n tag_13:\n /* \"Counter.sol\":228:229 1 */\n 0x01\n /* \"Counter.sol\":219:224 count */\n 0x00\n dup1\n /* \"Counter.sol\":219:229 count -= 1 */\n dup3\n dup3\n sload\n tag_19\n swap2\n swap1\n tag_20\n jump\t// in\n tag_19:\n swap3\n pop\n pop\n dup2\n swap1\n sstore\n pop\n /* \"Counter.sol\":174:236 function decrementCounter() public {... */\n jump\t// out\n /* \"#utility.yul\":7:83 */\n tag_21:\n /* \"#utility.yul\":43:50 */\n 0x00\n /* \"#utility.yul\":72:77 */\n dup2\n /* \"#utility.yul\":61:77 */\n swap1\n pop\n /* \"#utility.yul\":7:83 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":89:204 */\n tag_22:\n /* \"#utility.yul\":174:197 */\n tag_27\n /* \"#utility.yul\":191:196 */\n dup2\n /* \"#utility.yul\":174:197 */\n tag_21\n jump\t// in\n tag_27:\n /* \"#utility.yul\":169:172 */\n dup3\n /* \"#utility.yul\":162:198 */\n mstore\n /* \"#utility.yul\":89:204 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":210:428 */\n tag_11:\n /* \"#utility.yul\":301:305 */\n 0x00\n /* \"#utility.yul\":339:341 */\n 0x20\n /* \"#utility.yul\":328:337 */\n dup3\n /* \"#utility.yul\":324:342 */\n add\n /* \"#utility.yul\":316:342 */\n swap1\n pop\n /* \"#utility.yul\":352:421 */\n tag_29\n /* \"#utility.yul\":418:419 */\n 0x00\n /* \"#utility.yul\":407:416 */\n dup4\n /* \"#utility.yul\":403:420 */\n add\n /* \"#utility.yul\":394:400 */\n dup5\n /* \"#utility.yul\":352:421 */\n tag_22\n jump\t// in\n tag_29:\n /* \"#utility.yul\":210:428 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":434:614 */\n tag_23:\n /* \"#utility.yul\":482:559 */\n 0x4e487b7100000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":479:480 */\n 0x00\n /* \"#utility.yul\":472:560 */\n mstore\n /* \"#utility.yul\":579:583 */\n 0x11\n /* \"#utility.yul\":576:577 */\n 0x04\n /* \"#utility.yul\":569:584 */\n mstore\n /* \"#utility.yul\":603:607 */\n 0x24\n /* \"#utility.yul\":600:601 */\n 0x00\n /* \"#utility.yul\":593:608 */\n revert\n /* \"#utility.yul\":620:1145 */\n tag_16:\n /* \"#utility.yul\":659:662 */\n 0x00\n /* \"#utility.yul\":678:697 */\n tag_32\n /* \"#utility.yul\":695:696 */\n dup3\n /* \"#utility.yul\":678:697 */\n tag_21\n jump\t// in\n tag_32:\n /* \"#utility.yul\":673:697 */\n swap2\n pop\n /* \"#utility.yul\":711:730 */\n tag_33\n /* \"#utility.yul\":728:729 */\n dup4\n /* \"#utility.yul\":711:730 */\n tag_21\n jump\t// in\n tag_33:\n /* \"#utility.yul\":706:730 */\n swap3\n pop\n /* \"#utility.yul\":899:900 */\n dup2\n /* \"#utility.yul\":831:897 */\n 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":827:901 */\n sub\n /* \"#utility.yul\":824:825 */\n dup4\n /* \"#utility.yul\":820:902 */\n sgt\n /* \"#utility.yul\":815:816 */\n 0x00\n /* \"#utility.yul\":812:813 */\n dup4\n /* \"#utility.yul\":808:817 */\n slt\n /* \"#utility.yul\":801:818 */\n iszero\n /* \"#utility.yul\":797:903 */\n and\n /* \"#utility.yul\":794:926 */\n iszero\n tag_34\n jumpi\n /* \"#utility.yul\":906:924 */\n tag_35\n tag_23\n jump\t// in\n tag_35:\n /* \"#utility.yul\":794:926 */\n tag_34:\n /* \"#utility.yul\":1086:1087 */\n dup2\n /* \"#utility.yul\":1018:1084 */\n 0x8000000000000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1014:1088 */\n sub\n /* \"#utility.yul\":1011:1012 */\n dup4\n /* \"#utility.yul\":1007:1089 */\n slt\n /* \"#utility.yul\":1003:1004 */\n 0x00\n /* \"#utility.yul\":1000:1001 */\n dup4\n /* \"#utility.yul\":996:1005 */\n slt\n /* \"#utility.yul\":992:1090 */\n and\n /* \"#utility.yul\":989:1113 */\n iszero\n tag_36\n jumpi\n /* \"#utility.yul\":1093:1111 */\n tag_37\n tag_23\n jump\t// in\n tag_37:\n /* \"#utility.yul\":989:1113 */\n tag_36:\n /* \"#utility.yul\":1137:1138 */\n dup3\n /* \"#utility.yul\":1134:1135 */\n dup3\n /* \"#utility.yul\":1130:1139 */\n add\n /* \"#utility.yul\":1123:1139 */\n swap1\n pop\n /* \"#utility.yul\":620:1145 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1151:1678 */\n tag_20:\n /* \"#utility.yul\":1190:1194 */\n 0x00\n /* \"#utility.yul\":1210:1229 */\n tag_39\n /* \"#utility.yul\":1227:1228 */\n dup3\n /* \"#utility.yul\":1210:1229 */\n tag_21\n jump\t// in\n tag_39:\n /* \"#utility.yul\":1205:1229 */\n swap2\n pop\n /* \"#utility.yul\":1243:1262 */\n tag_40\n /* \"#utility.yul\":1260:1261 */\n dup4\n /* \"#utility.yul\":1243:1262 */\n tag_21\n jump\t// in\n tag_40:\n /* \"#utility.yul\":1238:1262 */\n swap3\n pop\n /* \"#utility.yul\":1432:1433 */\n dup3\n /* \"#utility.yul\":1364:1430 */\n 0x8000000000000000000000000000000000000000000000000000000000000000\n /* \"#utility.yul\":1360:1434 */\n add\n /* \"#utility.yul\":1357:1358 */\n dup3\n /* \"#utility.yul\":1353:1435 */\n slt\n /* \"#utility.yul\":1348:1349 */\n 0x00\n /* \"#utility.yul\":1345:1346 */\n dup5\n /* \"#utility.yul\":1341:1350 */\n slt\n /* \"#utility.yul\":1334:1351 */\n iszero\n /* \"#utility.yul\":1330:1436 */\n and\n /* \"#utility.yul\":1327:1459 */\n iszero\n tag_41\n jumpi\n /* \"#utility.yul\":1439:1457 */\n tag_42\n tag_23\n jump\t// in\n tag_42:\n /* \"#utility.yul\":1327:1459 */\n tag_41:\n /* \"#utility.yul\":1618:1619 */\n dup3\n /* \"#utility.yul\":1550:1616 */\n 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1546:1620 */\n add\n /* \"#utility.yul\":1543:1544 */\n dup3\n /* \"#utility.yul\":1539:1621 */\n sgt\n /* \"#utility.yul\":1535:1536 */\n 0x00\n /* \"#utility.yul\":1532:1533 */\n dup5\n /* \"#utility.yul\":1528:1537 */\n slt\n /* \"#utility.yul\":1524:1622 */\n and\n /* \"#utility.yul\":1521:1645 */\n iszero\n tag_43\n jumpi\n /* \"#utility.yul\":1625:1643 */\n tag_44\n tag_23\n jump\t// in\n tag_44:\n /* \"#utility.yul\":1521:1645 */\n tag_43:\n /* \"#utility.yul\":1670:1671 */\n dup3\n /* \"#utility.yul\":1667:1668 */\n dup3\n /* \"#utility.yul\":1663:1672 */\n sub\n /* \"#utility.yul\":1655:1672 */\n swap1\n pop\n /* \"#utility.yul\":1151:1678 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220925a4145f151297d7a70a5ccdc4eacfea52853a79b3c66663f7c35ba4d1575d964736f6c634300080a0033\n}\n", + "bytecode": { + "functionDebugData": {}, + "generatedSources": [], + "linkReferences": {}, + "object": "60806040526000805534801561001457600080fd5b50610278806100246000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80635b34b96614610046578063a87d942c14610050578063f5c5ad831461006e575b600080fd5b61004e610078565b005b610058610093565b60405161006591906100d0565b60405180910390f35b61007661009c565b005b600160008082825461008a919061011a565b92505081905550565b60008054905090565b60016000808282546100ae91906101ae565b92505081905550565b6000819050919050565b6100ca816100b7565b82525050565b60006020820190506100e560008301846100c1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610125826100b7565b9150610130836100b7565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561016b5761016a6100eb565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156101a3576101a26100eb565b5b828201905092915050565b60006101b9826100b7565b91506101c4836100b7565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156101ff576101fe6100eb565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615610237576102366100eb565b5b82820390509291505056fea2646970667358221220925a4145f151297d7a70a5ccdc4eacfea52853a79b3c66663f7c35ba4d1575d964736f6c634300080a0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 SSTORE CALLVALUE DUP1 ISZERO PUSH2 0x14 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x278 DUP1 PUSH2 0x24 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5B34B966 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xA87D942C EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF5C5AD83 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x78 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x58 PUSH2 0x93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x65 SWAP2 SWAP1 PUSH2 0xD0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x76 PUSH2 0x9C JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP1 DUP3 DUP3 SLOAD PUSH2 0x8A SWAP2 SWAP1 PUSH2 0x11A JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP1 DUP3 DUP3 SLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0x1AE JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xCA DUP2 PUSH2 0xB7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x125 DUP3 PUSH2 0xB7 JUMP JUMPDEST SWAP2 POP PUSH2 0x130 DUP4 PUSH2 0xB7 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP4 SGT PUSH1 0x0 DUP4 SLT ISZERO AND ISZERO PUSH2 0x16B JUMPI PUSH2 0x16A PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP2 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SUB DUP4 SLT PUSH1 0x0 DUP4 SLT AND ISZERO PUSH2 0x1A3 JUMPI PUSH2 0x1A2 PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B9 DUP3 PUSH2 0xB7 JUMP JUMPDEST SWAP2 POP PUSH2 0x1C4 DUP4 PUSH2 0xB7 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 ADD DUP3 SLT PUSH1 0x0 DUP5 SLT ISZERO AND ISZERO PUSH2 0x1FF JUMPI PUSH2 0x1FE PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP3 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 SGT PUSH1 0x0 DUP5 SLT AND ISZERO PUSH2 0x237 JUMPI PUSH2 0x236 PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP3 GAS COINBASE GASLIMIT CALL MLOAD 0x29 PUSH30 0x7A70A5CCDC4EACFEA52853A79B3C66663F7C35BA4D1575D964736F6C6343 STOP ADDMOD EXP STOP CALLER ", + "sourceMap": "57:261:0:-:0;;;100:1;80:21;;57:261;;;;;;;;;;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@decrementCounter_20": { + "entryPoint": 156, + "id": 20, + "parameterSlots": 0, + "returnSlots": 0 + }, + "@getCount_28": { + "entryPoint": 147, + "id": 28, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@incrementCounter_12": { + "entryPoint": 120, + "id": 12, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_encode_t_int256_to_t_int256_fromStack": { + "entryPoint": 193, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed": { + "entryPoint": 208, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_add_t_int256": { + "entryPoint": 282, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "checked_sub_t_int256": { + "entryPoint": 430, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "cleanup_t_int256": { + "entryPoint": 183, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "panic_error_0x11": { + "entryPoint": 235, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1681:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "51:32:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "61:16:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "72:5:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "61:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_int256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "33:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "43:7:2", + "type": "" + } + ], + "src": "7:76:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "152:52:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "169:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "191:5:2" + } + ], + "functionName": { + "name": "cleanup_t_int256", + "nodeType": "YulIdentifier", + "src": "174:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "174:23:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "162:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "162:36:2" + }, + "nodeType": "YulExpressionStatement", + "src": "162:36:2" + } + ] + }, + "name": "abi_encode_t_int256_to_t_int256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "140:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "147:3:2", + "type": "" + } + ], + "src": "89:115:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "306:122:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "316:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "328:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "339:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "324:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "324:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "316:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "394:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "407:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "418:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "403:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "403:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_int256_to_t_int256_fromStack", + "nodeType": "YulIdentifier", + "src": "352:41:2" + }, + "nodeType": "YulFunctionCall", + "src": "352:69:2" + }, + "nodeType": "YulExpressionStatement", + "src": "352:69:2" + } + ] + }, + "name": "abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "278:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "290:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "301:4:2", + "type": "" + } + ], + "src": "210:218:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "462:152:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "479:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "482:77:2", + "type": "", + "value": "35408467139433450592217433187231851964531694900788300625387963629091585785856" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "472:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "472:88:2" + }, + "nodeType": "YulExpressionStatement", + "src": "472:88:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "576:1:2", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "579:4:2", + "type": "", + "value": "0x11" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "569:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "569:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "569:15:2" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "600:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "603:4:2", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "593:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "593:15:2" + }, + "nodeType": "YulExpressionStatement", + "src": "593:15:2" + } + ] + }, + "name": "panic_error_0x11", + "nodeType": "YulFunctionDefinition", + "src": "434:180:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "663:482:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "673:24:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "695:1:2" + } + ], + "functionName": { + "name": "cleanup_t_int256", + "nodeType": "YulIdentifier", + "src": "678:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "678:19:2" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "673:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "706:24:2", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "728:1:2" + } + ], + "functionName": { + "name": "cleanup_t_int256", + "nodeType": "YulIdentifier", + "src": "711:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "711:19:2" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "706:1:2" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "904:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "906:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "906:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "906:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "812:1:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "815:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "808:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "808:9:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "801:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "801:17:2" + }, + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "824:1:2" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "831:66:2", + "type": "", + "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "899:1:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "827:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "827:74:2" + } + ], + "functionName": { + "name": "sgt", + "nodeType": "YulIdentifier", + "src": "820:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "820:82:2" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "797:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "797:106:2" + }, + "nodeType": "YulIf", + "src": "794:132:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1091:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1093:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "1093:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1093:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1000:1:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1003:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "996:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "996:9:2" + }, + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1011:1:2" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1018:66:2", + "type": "", + "value": "0x8000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1086:1:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1014:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1014:74:2" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1007:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1007:82:2" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "992:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "992:98:2" + }, + "nodeType": "YulIf", + "src": "989:124:2" + }, + { + "nodeType": "YulAssignment", + "src": "1123:16:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1134:1:2" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1137:1:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1130:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1130:9:2" + }, + "variableNames": [ + { + "name": "sum", + "nodeType": "YulIdentifier", + "src": "1123:3:2" + } + ] + } + ] + }, + "name": "checked_add_t_int256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "650:1:2", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "653:1:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "sum", + "nodeType": "YulTypedName", + "src": "659:3:2", + "type": "" + } + ], + "src": "620:525:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1195:483:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1205:24:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1227:1:2" + } + ], + "functionName": { + "name": "cleanup_t_int256", + "nodeType": "YulIdentifier", + "src": "1210:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "1210:19:2" + }, + "variableNames": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1205:1:2" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1238:24:2", + "value": { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1260:1:2" + } + ], + "functionName": { + "name": "cleanup_t_int256", + "nodeType": "YulIdentifier", + "src": "1243:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "1243:19:2" + }, + "variableNames": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1238:1:2" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1437:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1439:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "1439:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1439:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1345:1:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1348:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1341:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1341:9:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1334:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1334:17:2" + }, + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1357:1:2" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1364:66:2", + "type": "", + "value": "0x8000000000000000000000000000000000000000000000000000000000000000" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1432:1:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1360:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1360:74:2" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1353:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1353:82:2" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1330:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1330:106:2" + }, + "nodeType": "YulIf", + "src": "1327:132:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1623:22:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x11", + "nodeType": "YulIdentifier", + "src": "1625:16:2" + }, + "nodeType": "YulFunctionCall", + "src": "1625:18:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1625:18:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1532:1:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1535:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1528:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1528:9:2" + }, + { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1543:1:2" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1550:66:2", + "type": "", + "value": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1618:1:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1546:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1546:74:2" + } + ], + "functionName": { + "name": "sgt", + "nodeType": "YulIdentifier", + "src": "1539:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1539:82:2" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1524:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1524:98:2" + }, + "nodeType": "YulIf", + "src": "1521:124:2" + }, + { + "nodeType": "YulAssignment", + "src": "1655:17:2", + "value": { + "arguments": [ + { + "name": "x", + "nodeType": "YulIdentifier", + "src": "1667:1:2" + }, + { + "name": "y", + "nodeType": "YulIdentifier", + "src": "1670:1:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1663:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1663:9:2" + }, + "variableNames": [ + { + "name": "diff", + "nodeType": "YulIdentifier", + "src": "1655:4:2" + } + ] + } + ] + }, + "name": "checked_sub_t_int256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "x", + "nodeType": "YulTypedName", + "src": "1181:1:2", + "type": "" + }, + { + "name": "y", + "nodeType": "YulTypedName", + "src": "1184:1:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "diff", + "nodeType": "YulTypedName", + "src": "1190:4:2", + "type": "" + } + ], + "src": "1151:527:2" + } + ] + }, + "contents": "{\n\n function cleanup_t_int256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_int256_to_t_int256_fromStack(value, pos) {\n mstore(pos, cleanup_t_int256(value))\n }\n\n function abi_encode_tuple_t_int256__to_t_int256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_int256_to_t_int256_fromStack(value0, add(headStart, 0))\n\n }\n\n function panic_error_0x11() {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n\n function checked_add_t_int256(x, y) -> sum {\n x := cleanup_t_int256(x)\n y := cleanup_t_int256(y)\n\n // overflow, if x >= 0 and y > (maxValue - x)\n if and(iszero(slt(x, 0)), sgt(y, sub(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n // underflow, if x < 0 and y < (minValue - x)\n if and(slt(x, 0), slt(y, sub(0x8000000000000000000000000000000000000000000000000000000000000000, x))) { panic_error_0x11() }\n\n sum := add(x, y)\n }\n\n function checked_sub_t_int256(x, y) -> diff {\n x := cleanup_t_int256(x)\n y := cleanup_t_int256(y)\n\n // underflow, if y >= 0 and x < (minValue + y)\n if and(iszero(slt(y, 0)), slt(x, add(0x8000000000000000000000000000000000000000000000000000000000000000, y))) { panic_error_0x11() }\n // overflow, if y < 0 and x > (maxValue + y)\n if and(slt(y, 0), sgt(x, add(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, y))) { panic_error_0x11() }\n\n diff := sub(x, y)\n }\n\n}\n", + "id": 2, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c80635b34b96614610046578063a87d942c14610050578063f5c5ad831461006e575b600080fd5b61004e610078565b005b610058610093565b60405161006591906100d0565b60405180910390f35b61007661009c565b005b600160008082825461008a919061011a565b92505081905550565b60008054905090565b60016000808282546100ae91906101ae565b92505081905550565b6000819050919050565b6100ca816100b7565b82525050565b60006020820190506100e560008301846100c1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610125826100b7565b9150610130836100b7565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561016b5761016a6100eb565b5b817f80000000000000000000000000000000000000000000000000000000000000000383126000831216156101a3576101a26100eb565b5b828201905092915050565b60006101b9826100b7565b91506101c4836100b7565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156101ff576101fe6100eb565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615610237576102366100eb565b5b82820390509291505056fea2646970667358221220925a4145f151297d7a70a5ccdc4eacfea52853a79b3c66663f7c35ba4d1575d964736f6c634300080a0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x5B34B966 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0xA87D942C EQ PUSH2 0x50 JUMPI DUP1 PUSH4 0xF5C5AD83 EQ PUSH2 0x6E JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x78 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x58 PUSH2 0x93 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x65 SWAP2 SWAP1 PUSH2 0xD0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x76 PUSH2 0x9C JUMP JUMPDEST STOP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP1 DUP3 DUP3 SLOAD PUSH2 0x8A SWAP2 SWAP1 PUSH2 0x11A JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP1 DUP3 DUP3 SLOAD PUSH2 0xAE SWAP2 SWAP1 PUSH2 0x1AE JUMP JUMPDEST SWAP3 POP POP DUP2 SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0xCA DUP2 PUSH2 0xB7 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0xE5 PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xC1 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x125 DUP3 PUSH2 0xB7 JUMP JUMPDEST SWAP2 POP PUSH2 0x130 DUP4 PUSH2 0xB7 JUMP JUMPDEST SWAP3 POP DUP2 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SUB DUP4 SGT PUSH1 0x0 DUP4 SLT ISZERO AND ISZERO PUSH2 0x16B JUMPI PUSH2 0x16A PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP2 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 SUB DUP4 SLT PUSH1 0x0 DUP4 SLT AND ISZERO PUSH2 0x1A3 JUMPI PUSH2 0x1A2 PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP3 DUP3 ADD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1B9 DUP3 PUSH2 0xB7 JUMP JUMPDEST SWAP2 POP PUSH2 0x1C4 DUP4 PUSH2 0xB7 JUMP JUMPDEST SWAP3 POP DUP3 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 ADD DUP3 SLT PUSH1 0x0 DUP5 SLT ISZERO AND ISZERO PUSH2 0x1FF JUMPI PUSH2 0x1FE PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP3 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD DUP3 SGT PUSH1 0x0 DUP5 SLT AND ISZERO PUSH2 0x237 JUMPI PUSH2 0x236 PUSH2 0xEB JUMP JUMPDEST JUMPDEST DUP3 DUP3 SUB SWAP1 POP SWAP3 SWAP2 POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP3 GAS COINBASE GASLIMIT CALL MLOAD 0x29 PUSH30 0x7A70A5CCDC4EACFEA52853A79B3C66663F7C35BA4D1575D964736F6C6343 STOP ADDMOD EXP STOP CALLER ", + "sourceMap": "57:261:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;107:62;;;:::i;:::-;;241:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;174:62;;;:::i;:::-;;107;161:1;152:5;;:10;;;;;;;:::i;:::-;;;;;;;;107:62::o;241:75::-;282:3;304:5;;297:12;;241:75;:::o;174:62::-;228:1;219:5;;:10;;;;;;;:::i;:::-;;;;;;;;174:62::o;7:76:2:-;43:7;72:5;61:16;;7:76;;;:::o;89:115::-;174:23;191:5;174:23;:::i;:::-;169:3;162:36;89:115;;:::o;210:218::-;301:4;339:2;328:9;324:18;316:26;;352:69;418:1;407:9;403:17;394:6;352:69;:::i;:::-;210:218;;;;:::o;434:180::-;482:77;479:1;472:88;579:4;576:1;569:15;603:4;600:1;593:15;620:525;659:3;678:19;695:1;678:19;:::i;:::-;673:24;;711:19;728:1;711:19;:::i;:::-;706:24;;899:1;831:66;827:74;824:1;820:82;815:1;812;808:9;801:17;797:106;794:132;;;906:18;;:::i;:::-;794:132;1086:1;1018:66;1014:74;1011:1;1007:82;1003:1;1000;996:9;992:98;989:124;;;1093:18;;:::i;:::-;989:124;1137:1;1134;1130:9;1123:16;;620:525;;;;:::o;1151:527::-;1190:4;1210:19;1227:1;1210:19;:::i;:::-;1205:24;;1243:19;1260:1;1243:19;:::i;:::-;1238:24;;1432:1;1364:66;1360:74;1357:1;1353:82;1348:1;1345;1341:9;1334:17;1330:106;1327:132;;;1439:18;;:::i;:::-;1327:132;1618:1;1550:66;1546:74;1543:1;1539:82;1535:1;1532;1528:9;1524:98;1521:124;;;1625:18;;:::i;:::-;1521:124;1670:1;1667;1663:9;1655:17;;1151:527;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "126400", + "executionCost": "5177", + "totalCost": "131577" + }, + "external": { + "decrementCounter()": "infinite", + "getCount()": "2437", + "incrementCounter()": "infinite" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { + "begin": 57, + "end": 318, + "name": "MSTORE", + "source": 0 + }, + { + "begin": 100, + "end": 101, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 80, + "end": 101, + "name": "DUP1", + "source": 0 + }, + { + "begin": 80, + "end": 101, + "name": "SSTORE", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "CALLVALUE", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "ISZERO", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPI", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "REVERT", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "tag", + "source": 0, + "value": "1" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "POP", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH #[$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH [$]", + "source": 0, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 57, + "end": 318, + "name": "CODECOPY", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 57, + "end": 318, + "name": "RETURN", + "source": 0 + } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220925a4145f151297d7a70a5ccdc4eacfea52853a79b3c66663f7c35ba4d1575d964736f6c634300080a0033", + ".code": [ + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "80" + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { + "begin": 57, + "end": 318, + "name": "MSTORE", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "CALLVALUE", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "ISZERO", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH [tag]", + "source": 0, + "value": "1" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPI", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "REVERT", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "tag", + "source": 0, + "value": "1" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "POP", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "4" + }, + { + "begin": 57, + "end": 318, + "name": "CALLDATASIZE", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "LT", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH [tag]", + "source": 0, + "value": "2" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPI", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 57, + "end": 318, + "name": "CALLDATALOAD", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "E0" + }, + { + "begin": 57, + "end": 318, + "name": "SHR", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "5B34B966" + }, + { + "begin": 57, + "end": 318, + "name": "EQ", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH [tag]", + "source": 0, + "value": "3" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPI", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "A87D942C" + }, + { + "begin": 57, + "end": 318, + "name": "EQ", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH [tag]", + "source": 0, + "value": "4" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPI", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "F5C5AD83" + }, + { + "begin": 57, + "end": 318, + "name": "EQ", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH [tag]", + "source": 0, + "value": "5" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPI", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "tag", + "source": 0, + "value": "2" + }, + { + "begin": 57, + "end": 318, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 57, + "end": 318, + "name": "DUP1", + "source": 0 + }, + { + "begin": 57, + "end": 318, + "name": "REVERT", + "source": 0 + }, + { + "begin": 107, + "end": 169, + "name": "tag", + "source": 0, + "value": "3" + }, + { + "begin": 107, + "end": 169, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 107, + "end": 169, + "name": "PUSH [tag]", + "source": 0, + "value": "6" + }, + { + "begin": 107, + "end": 169, + "name": "PUSH [tag]", + "source": 0, + "value": "7" + }, + { + "begin": 107, + "end": 169, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 107, + "end": 169, + "name": "tag", + "source": 0, + "value": "6" + }, + { + "begin": 107, + "end": 169, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 107, + "end": 169, + "name": "STOP", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "tag", + "source": 0, + "value": "4" + }, + { + "begin": 241, + "end": 316, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "PUSH [tag]", + "source": 0, + "value": "8" + }, + { + "begin": 241, + "end": 316, + "name": "PUSH [tag]", + "source": 0, + "value": "9" + }, + { + "begin": 241, + "end": 316, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 241, + "end": 316, + "name": "tag", + "source": 0, + "value": "8" + }, + { + "begin": 241, + "end": 316, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { + "begin": 241, + "end": 316, + "name": "MLOAD", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "PUSH [tag]", + "source": 0, + "value": "10" + }, + { + "begin": 241, + "end": 316, + "name": "SWAP2", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "PUSH [tag]", + "source": 0, + "value": "11" + }, + { + "begin": 241, + "end": 316, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 241, + "end": 316, + "name": "tag", + "source": 0, + "value": "10" + }, + { + "begin": 241, + "end": 316, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "PUSH", + "source": 0, + "value": "40" + }, + { + "begin": 241, + "end": 316, + "name": "MLOAD", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "DUP1", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "SWAP2", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "SUB", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "RETURN", + "source": 0 + }, + { + "begin": 174, + "end": 236, + "name": "tag", + "source": 0, + "value": "5" + }, + { + "begin": 174, + "end": 236, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 174, + "end": 236, + "name": "PUSH [tag]", + "source": 0, + "value": "12" + }, + { + "begin": 174, + "end": 236, + "name": "PUSH [tag]", + "source": 0, + "value": "13" + }, + { + "begin": 174, + "end": 236, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 174, + "end": 236, + "name": "tag", + "source": 0, + "value": "12" + }, + { + "begin": 174, + "end": 236, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 174, + "end": 236, + "name": "STOP", + "source": 0 + }, + { + "begin": 107, + "end": 169, + "name": "tag", + "source": 0, + "value": "7" + }, + { + "begin": 107, + "end": 169, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 161, + "end": 162, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 152, + "end": 157, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 152, + "end": 157, + "name": "DUP1", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "DUP3", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "DUP3", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "SLOAD", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "PUSH [tag]", + "source": 0, + "value": "15" + }, + { + "begin": 152, + "end": 162, + "name": "SWAP2", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "PUSH [tag]", + "source": 0, + "value": "16" + }, + { + "begin": 152, + "end": 162, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 152, + "end": 162, + "name": "tag", + "source": 0, + "value": "15" + }, + { + "begin": 152, + "end": 162, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "SWAP3", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "POP", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "POP", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "DUP2", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "SSTORE", + "source": 0 + }, + { + "begin": 152, + "end": 162, + "name": "POP", + "source": 0 + }, + { + "begin": 107, + "end": 169, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 241, + "end": 316, + "name": "tag", + "source": 0, + "value": "9" + }, + { + "begin": 241, + "end": 316, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 282, + "end": 285, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 304, + "end": 309, + "name": "DUP1", + "source": 0 + }, + { + "begin": 304, + "end": 309, + "name": "SLOAD", + "source": 0 + }, + { + "begin": 297, + "end": 309, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 297, + "end": 309, + "name": "POP", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 241, + "end": 316, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 174, + "end": 236, + "name": "tag", + "source": 0, + "value": "13" + }, + { + "begin": 174, + "end": 236, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 228, + "end": 229, + "name": "PUSH", + "source": 0, + "value": "1" + }, + { + "begin": 219, + "end": 224, + "name": "PUSH", + "source": 0, + "value": "0" + }, + { + "begin": 219, + "end": 224, + "name": "DUP1", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "DUP3", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "DUP3", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "SLOAD", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "PUSH [tag]", + "source": 0, + "value": "19" + }, + { + "begin": 219, + "end": 229, + "name": "SWAP2", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "PUSH [tag]", + "source": 0, + "value": "20" + }, + { + "begin": 219, + "end": 229, + "name": "JUMP", + "source": 0, + "value": "[in]" + }, + { + "begin": 219, + "end": 229, + "name": "tag", + "source": 0, + "value": "19" + }, + { + "begin": 219, + "end": 229, + "name": "JUMPDEST", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "SWAP3", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "POP", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "POP", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "DUP2", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "SWAP1", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "SSTORE", + "source": 0 + }, + { + "begin": 219, + "end": 229, + "name": "POP", + "source": 0 + }, + { + "begin": 174, + "end": 236, + "name": "JUMP", + "source": 0, + "value": "[out]" + }, + { + "begin": 7, + "end": 83, + "name": "tag", + "source": 2, + "value": "21" + }, + { + "begin": 7, + "end": 83, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 43, + "end": 50, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 72, + "end": 77, + "name": "DUP2", + "source": 2 + }, + { + "begin": 61, + "end": 77, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 61, + "end": 77, + "name": "POP", + "source": 2 + }, + { + "begin": 7, + "end": 83, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 7, + "end": 83, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 7, + "end": 83, + "name": "POP", + "source": 2 + }, + { + "begin": 7, + "end": 83, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 89, + "end": 204, + "name": "tag", + "source": 2, + "value": "22" + }, + { + "begin": 89, + "end": 204, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 174, + "end": 197, + "name": "PUSH [tag]", + "source": 2, + "value": "27" + }, + { + "begin": 191, + "end": 196, + "name": "DUP2", + "source": 2 + }, + { + "begin": 174, + "end": 197, + "name": "PUSH [tag]", + "source": 2, + "value": "21" + }, + { + "begin": 174, + "end": 197, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 174, + "end": 197, + "name": "tag", + "source": 2, + "value": "27" + }, + { + "begin": 174, + "end": 197, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 169, + "end": 172, + "name": "DUP3", + "source": 2 + }, + { + "begin": 162, + "end": 198, + "name": "MSTORE", + "source": 2 + }, + { + "begin": 89, + "end": 204, + "name": "POP", + "source": 2 + }, + { + "begin": 89, + "end": 204, + "name": "POP", + "source": 2 + }, + { + "begin": 89, + "end": 204, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 210, + "end": 428, + "name": "tag", + "source": 2, + "value": "11" + }, + { + "begin": 210, + "end": 428, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 301, + "end": 305, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 339, + "end": 341, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { + "begin": 328, + "end": 337, + "name": "DUP3", + "source": 2 + }, + { + "begin": 324, + "end": 342, + "name": "ADD", + "source": 2 + }, + { + "begin": 316, + "end": 342, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 316, + "end": 342, + "name": "POP", + "source": 2 + }, + { + "begin": 352, + "end": 421, + "name": "PUSH [tag]", + "source": 2, + "value": "29" + }, + { + "begin": 418, + "end": 419, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 407, + "end": 416, + "name": "DUP4", + "source": 2 + }, + { + "begin": 403, + "end": 420, + "name": "ADD", + "source": 2 + }, + { + "begin": 394, + "end": 400, + "name": "DUP5", + "source": 2 + }, + { + "begin": 352, + "end": 421, + "name": "PUSH [tag]", + "source": 2, + "value": "22" + }, + { + "begin": 352, + "end": 421, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 352, + "end": 421, + "name": "tag", + "source": 2, + "value": "29" + }, + { + "begin": 352, + "end": 421, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 210, + "end": 428, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 210, + "end": 428, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 210, + "end": 428, + "name": "POP", + "source": 2 + }, + { + "begin": 210, + "end": 428, + "name": "POP", + "source": 2 + }, + { + "begin": 210, + "end": 428, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 434, + "end": 614, + "name": "tag", + "source": 2, + "value": "23" + }, + { + "begin": 434, + "end": 614, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 482, + "end": 559, + "name": "PUSH", + "source": 2, + "value": "4E487B7100000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 479, + "end": 480, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 472, + "end": 560, + "name": "MSTORE", + "source": 2 + }, + { + "begin": 579, + "end": 583, + "name": "PUSH", + "source": 2, + "value": "11" + }, + { + "begin": 576, + "end": 577, + "name": "PUSH", + "source": 2, + "value": "4" + }, + { + "begin": 569, + "end": 584, + "name": "MSTORE", + "source": 2 + }, + { + "begin": 603, + "end": 607, + "name": "PUSH", + "source": 2, + "value": "24" + }, + { + "begin": 600, + "end": 601, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 593, + "end": 608, + "name": "REVERT", + "source": 2 + }, + { + "begin": 620, + "end": 1145, + "name": "tag", + "source": 2, + "value": "16" + }, + { + "begin": 620, + "end": 1145, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 659, + "end": 662, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 678, + "end": 697, + "name": "PUSH [tag]", + "source": 2, + "value": "32" + }, + { + "begin": 695, + "end": 696, + "name": "DUP3", + "source": 2 + }, + { + "begin": 678, + "end": 697, + "name": "PUSH [tag]", + "source": 2, + "value": "21" + }, + { + "begin": 678, + "end": 697, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 678, + "end": 697, + "name": "tag", + "source": 2, + "value": "32" + }, + { + "begin": 678, + "end": 697, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 673, + "end": 697, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 673, + "end": 697, + "name": "POP", + "source": 2 + }, + { + "begin": 711, + "end": 730, + "name": "PUSH [tag]", + "source": 2, + "value": "33" + }, + { + "begin": 728, + "end": 729, + "name": "DUP4", + "source": 2 + }, + { + "begin": 711, + "end": 730, + "name": "PUSH [tag]", + "source": 2, + "value": "21" + }, + { + "begin": 711, + "end": 730, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 711, + "end": 730, + "name": "tag", + "source": 2, + "value": "33" + }, + { + "begin": 711, + "end": 730, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 706, + "end": 730, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 706, + "end": 730, + "name": "POP", + "source": 2 + }, + { + "begin": 899, + "end": 900, + "name": "DUP2", + "source": 2 + }, + { + "begin": 831, + "end": 897, + "name": "PUSH", + "source": 2, + "value": "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 827, + "end": 901, + "name": "SUB", + "source": 2 + }, + { + "begin": 824, + "end": 825, + "name": "DUP4", + "source": 2 + }, + { + "begin": 820, + "end": 902, + "name": "SGT", + "source": 2 + }, + { + "begin": 815, + "end": 816, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 812, + "end": 813, + "name": "DUP4", + "source": 2 + }, + { + "begin": 808, + "end": 817, + "name": "SLT", + "source": 2 + }, + { + "begin": 801, + "end": 818, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 797, + "end": 903, + "name": "AND", + "source": 2 + }, + { + "begin": 794, + "end": 926, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 794, + "end": 926, + "name": "PUSH [tag]", + "source": 2, + "value": "34" + }, + { + "begin": 794, + "end": 926, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 906, + "end": 924, + "name": "PUSH [tag]", + "source": 2, + "value": "35" + }, + { + "begin": 906, + "end": 924, + "name": "PUSH [tag]", + "source": 2, + "value": "23" + }, + { + "begin": 906, + "end": 924, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 906, + "end": 924, + "name": "tag", + "source": 2, + "value": "35" + }, + { + "begin": 906, + "end": 924, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 794, + "end": 926, + "name": "tag", + "source": 2, + "value": "34" + }, + { + "begin": 794, + "end": 926, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1086, + "end": 1087, + "name": "DUP2", + "source": 2 + }, + { + "begin": 1018, + "end": 1084, + "name": "PUSH", + "source": 2, + "value": "8000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1014, + "end": 1088, + "name": "SUB", + "source": 2 + }, + { + "begin": 1011, + "end": 1012, + "name": "DUP4", + "source": 2 + }, + { + "begin": 1007, + "end": 1089, + "name": "SLT", + "source": 2 + }, + { + "begin": 1003, + "end": 1004, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1000, + "end": 1001, + "name": "DUP4", + "source": 2 + }, + { + "begin": 996, + "end": 1005, + "name": "SLT", + "source": 2 + }, + { + "begin": 992, + "end": 1090, + "name": "AND", + "source": 2 + }, + { + "begin": 989, + "end": 1113, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 989, + "end": 1113, + "name": "PUSH [tag]", + "source": 2, + "value": "36" + }, + { + "begin": 989, + "end": 1113, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 1093, + "end": 1111, + "name": "PUSH [tag]", + "source": 2, + "value": "37" + }, + { + "begin": 1093, + "end": 1111, + "name": "PUSH [tag]", + "source": 2, + "value": "23" + }, + { + "begin": 1093, + "end": 1111, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1093, + "end": 1111, + "name": "tag", + "source": 2, + "value": "37" + }, + { + "begin": 1093, + "end": 1111, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 989, + "end": 1113, + "name": "tag", + "source": 2, + "value": "36" + }, + { + "begin": 989, + "end": 1113, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1137, + "end": 1138, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1134, + "end": 1135, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1130, + "end": 1139, + "name": "ADD", + "source": 2 + }, + { + "begin": 1123, + "end": 1139, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1123, + "end": 1139, + "name": "POP", + "source": 2 + }, + { + "begin": 620, + "end": 1145, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 620, + "end": 1145, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 620, + "end": 1145, + "name": "POP", + "source": 2 + }, + { + "begin": 620, + "end": 1145, + "name": "POP", + "source": 2 + }, + { + "begin": 620, + "end": 1145, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1151, + "end": 1678, + "name": "tag", + "source": 2, + "value": "20" + }, + { + "begin": 1151, + "end": 1678, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1190, + "end": 1194, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1210, + "end": 1229, + "name": "PUSH [tag]", + "source": 2, + "value": "39" + }, + { + "begin": 1227, + "end": 1228, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1210, + "end": 1229, + "name": "PUSH [tag]", + "source": 2, + "value": "21" + }, + { + "begin": 1210, + "end": 1229, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1210, + "end": 1229, + "name": "tag", + "source": 2, + "value": "39" + }, + { + "begin": 1210, + "end": 1229, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1205, + "end": 1229, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1205, + "end": 1229, + "name": "POP", + "source": 2 + }, + { + "begin": 1243, + "end": 1262, + "name": "PUSH [tag]", + "source": 2, + "value": "40" + }, + { + "begin": 1260, + "end": 1261, + "name": "DUP4", + "source": 2 + }, + { + "begin": 1243, + "end": 1262, + "name": "PUSH [tag]", + "source": 2, + "value": "21" + }, + { + "begin": 1243, + "end": 1262, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1243, + "end": 1262, + "name": "tag", + "source": 2, + "value": "40" + }, + { + "begin": 1243, + "end": 1262, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1238, + "end": 1262, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 1238, + "end": 1262, + "name": "POP", + "source": 2 + }, + { + "begin": 1432, + "end": 1433, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1364, + "end": 1430, + "name": "PUSH", + "source": 2, + "value": "8000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 1360, + "end": 1434, + "name": "ADD", + "source": 2 + }, + { + "begin": 1357, + "end": 1358, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1353, + "end": 1435, + "name": "SLT", + "source": 2 + }, + { + "begin": 1348, + "end": 1349, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1345, + "end": 1346, + "name": "DUP5", + "source": 2 + }, + { + "begin": 1341, + "end": 1350, + "name": "SLT", + "source": 2 + }, + { + "begin": 1334, + "end": 1351, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 1330, + "end": 1436, + "name": "AND", + "source": 2 + }, + { + "begin": 1327, + "end": 1459, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 1327, + "end": 1459, + "name": "PUSH [tag]", + "source": 2, + "value": "41" + }, + { + "begin": 1327, + "end": 1459, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 1439, + "end": 1457, + "name": "PUSH [tag]", + "source": 2, + "value": "42" + }, + { + "begin": 1439, + "end": 1457, + "name": "PUSH [tag]", + "source": 2, + "value": "23" + }, + { + "begin": 1439, + "end": 1457, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1439, + "end": 1457, + "name": "tag", + "source": 2, + "value": "42" + }, + { + "begin": 1439, + "end": 1457, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1327, + "end": 1459, + "name": "tag", + "source": 2, + "value": "41" + }, + { + "begin": 1327, + "end": 1459, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1618, + "end": 1619, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1550, + "end": 1616, + "name": "PUSH", + "source": 2, + "value": "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1546, + "end": 1620, + "name": "ADD", + "source": 2 + }, + { + "begin": 1543, + "end": 1544, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1539, + "end": 1621, + "name": "SGT", + "source": 2 + }, + { + "begin": 1535, + "end": 1536, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1532, + "end": 1533, + "name": "DUP5", + "source": 2 + }, + { + "begin": 1528, + "end": 1537, + "name": "SLT", + "source": 2 + }, + { + "begin": 1524, + "end": 1622, + "name": "AND", + "source": 2 + }, + { + "begin": 1521, + "end": 1645, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 1521, + "end": 1645, + "name": "PUSH [tag]", + "source": 2, + "value": "43" + }, + { + "begin": 1521, + "end": 1645, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 1625, + "end": 1643, + "name": "PUSH [tag]", + "source": 2, + "value": "44" + }, + { + "begin": 1625, + "end": 1643, + "name": "PUSH [tag]", + "source": 2, + "value": "23" + }, + { + "begin": 1625, + "end": 1643, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1625, + "end": 1643, + "name": "tag", + "source": 2, + "value": "44" + }, + { + "begin": 1625, + "end": 1643, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1521, + "end": 1645, + "name": "tag", + "source": 2, + "value": "43" + }, + { + "begin": 1521, + "end": 1645, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1670, + "end": 1671, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1667, + "end": 1668, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1663, + "end": 1672, + "name": "SUB", + "source": 2 + }, + { + "begin": 1655, + "end": 1672, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1655, + "end": 1672, + "name": "POP", + "source": 2 + }, + { + "begin": 1151, + "end": 1678, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 1151, + "end": 1678, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1151, + "end": 1678, + "name": "POP", + "source": 2 + }, + { + "begin": 1151, + "end": 1678, + "name": "POP", + "source": 2 + }, + { + "begin": 1151, + "end": 1678, + "name": "JUMP", + "source": 2, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "decrementCounter()": "f5c5ad83", + "getCount()": "a87d942c", + "incrementCounter()": "5b34b966" + } + }, + "ewasm": { + "wasm": "" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"decrementCounter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCount\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementCounter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"Counter.sol\":\"Counter\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"Counter.sol\":{\"keccak256\":\"0x78956c9a63d9d9c889e933e60a46e59dd067c65f0fde1dceb9ddf92aa2ce964a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4093cf3c1f5e64e772ff2a355daacd6a4ca090a7ee8d115c8e9344baeb29dac9\",\"dweb:/ipfs/QmU2DKfTGiFWak3ztG2ABFfNtp5rf5Mc6ibjQnn2GLijFv\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 4, + "contract": "Counter.sol:Counter", + "label": "count", + "offset": 0, + "slot": "0", + "type": "t_int256" + } + ], + "types": { + "t_int256": { + "encoding": "inplace", + "label": "int256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } +} diff --git a/smart_contracts/contracts/Counter.sol b/smart_contracts/contracts/Counter.sol new file mode 100644 index 0000000..2759f06 --- /dev/null +++ b/smart_contracts/contracts/Counter.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; +contract Counter { + int private count = 0; + function incrementCounter() public { + count += 1; + } + function decrementCounter() public { + count -= 1; + } + function getCount() public view returns (int) { + return count; + } +} \ No newline at end of file diff --git a/smart_contracts/contracts/SimpleStorage.json b/smart_contracts/contracts/SimpleStorage.json new file mode 100644 index 0000000..36f28b8 --- /dev/null +++ b/smart_contracts/contracts/SimpleStorage.json @@ -0,0 +1,6145 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "initVal", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "stored", + "type": "event" + }, + { + "inputs": [], + "name": "get", + "outputs": [ + { + "internalType": "uint256", + "name": "retVal", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "x", + "type": "uint256" + } + ], + "name": "set", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "storedData", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "evm": { + "assembly": " /* \"SimpleStorage.sol\":58:419 contract SimpleStorage {... */\n mstore(0x40, 0x80)\n /* \"SimpleStorage.sol\":154:249 constructor(uint initVal) {... */\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\ntag_1:\n pop\n mload(0x40)\n sub(codesize, bytecodeSize)\n dup1\n bytecodeSize\n dup4\n codecopy\n dup2\n dup2\n add\n 0x40\n mstore\n dup2\n add\n swap1\n tag_2\n swap2\n swap1\n tag_3\n jump\t// in\ntag_2:\n /* \"SimpleStorage.sol\":191:218 stored(msg.sender, initVal) */\n 0xc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f5\n /* \"SimpleStorage.sol\":198:208 msg.sender */\n caller\n /* \"SimpleStorage.sol\":210:217 initVal */\n dup3\n /* \"SimpleStorage.sol\":191:218 stored(msg.sender, initVal) */\n mload(0x40)\n tag_6\n swap3\n swap2\n swap1\n tag_7\n jump\t// in\ntag_6:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log1\n /* \"SimpleStorage.sol\":237:244 initVal */\n dup1\n /* \"SimpleStorage.sol\":224:234 storedData */\n 0x00\n /* \"SimpleStorage.sol\":224:244 storedData = initVal */\n dup2\n swap1\n sstore\n pop\n /* \"SimpleStorage.sol\":154:249 constructor(uint initVal) {... */\n pop\n /* \"SimpleStorage.sol\":58:419 contract SimpleStorage {... */\n jump(tag_8)\n /* \"#utility.yul\":88:205 */\ntag_10:\n /* \"#utility.yul\":197:198 */\n 0x00\n /* \"#utility.yul\":194:195 */\n dup1\n /* \"#utility.yul\":187:199 */\n revert\n /* \"#utility.yul\":334:411 */\ntag_12:\n /* \"#utility.yul\":371:378 */\n 0x00\n /* \"#utility.yul\":400:405 */\n dup2\n /* \"#utility.yul\":389:405 */\n swap1\n pop\n /* \"#utility.yul\":334:411 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":417:539 */\ntag_13:\n /* \"#utility.yul\":490:514 */\n tag_25\n /* \"#utility.yul\":508:513 */\n dup2\n /* \"#utility.yul\":490:514 */\n tag_12\n jump\t// in\ntag_25:\n /* \"#utility.yul\":483:488 */\n dup2\n /* \"#utility.yul\":480:515 */\n eq\n /* \"#utility.yul\":470:533 */\n tag_26\n jumpi\n /* \"#utility.yul\":529:530 */\n 0x00\n /* \"#utility.yul\":526:527 */\n dup1\n /* \"#utility.yul\":519:531 */\n revert\n /* \"#utility.yul\":470:533 */\ntag_26:\n /* \"#utility.yul\":417:539 */\n pop\n jump\t// out\n /* \"#utility.yul\":545:688 */\ntag_14:\n /* \"#utility.yul\":602:607 */\n 0x00\n /* \"#utility.yul\":633:639 */\n dup2\n /* \"#utility.yul\":627:640 */\n mload\n /* \"#utility.yul\":618:640 */\n swap1\n pop\n /* \"#utility.yul\":649:682 */\n tag_28\n /* \"#utility.yul\":676:681 */\n dup2\n /* \"#utility.yul\":649:682 */\n tag_13\n jump\t// in\ntag_28:\n /* \"#utility.yul\":545:688 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":694:1045 */\ntag_3:\n /* \"#utility.yul\":764:770 */\n 0x00\n /* \"#utility.yul\":813:815 */\n 0x20\n /* \"#utility.yul\":801:810 */\n dup3\n /* \"#utility.yul\":792:799 */\n dup5\n /* \"#utility.yul\":788:811 */\n sub\n /* \"#utility.yul\":784:816 */\n slt\n /* \"#utility.yul\":781:900 */\n iszero\n tag_30\n jumpi\n /* \"#utility.yul\":819:898 */\n tag_31\n tag_10\n jump\t// in\ntag_31:\n /* \"#utility.yul\":781:900 */\ntag_30:\n /* \"#utility.yul\":939:940 */\n 0x00\n /* \"#utility.yul\":964:1028 */\n tag_32\n /* \"#utility.yul\":1020:1027 */\n dup5\n /* \"#utility.yul\":1011:1017 */\n dup3\n /* \"#utility.yul\":1000:1009 */\n dup6\n /* \"#utility.yul\":996:1018 */\n add\n /* \"#utility.yul\":964:1028 */\n tag_14\n jump\t// in\ntag_32:\n /* \"#utility.yul\":954:1028 */\n swap2\n pop\n /* \"#utility.yul\":910:1038 */\n pop\n /* \"#utility.yul\":694:1045 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1051:1177 */\ntag_15:\n /* \"#utility.yul\":1088:1095 */\n 0x00\n /* \"#utility.yul\":1128:1170 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1121:1126 */\n dup3\n /* \"#utility.yul\":1117:1171 */\n and\n /* \"#utility.yul\":1106:1171 */\n swap1\n pop\n /* \"#utility.yul\":1051:1177 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1183:1279 */\ntag_16:\n /* \"#utility.yul\":1220:1227 */\n 0x00\n /* \"#utility.yul\":1249:1273 */\n tag_35\n /* \"#utility.yul\":1267:1272 */\n dup3\n /* \"#utility.yul\":1249:1273 */\n tag_15\n jump\t// in\ntag_35:\n /* \"#utility.yul\":1238:1273 */\n swap1\n pop\n /* \"#utility.yul\":1183:1279 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1285:1403 */\ntag_17:\n /* \"#utility.yul\":1372:1396 */\n tag_37\n /* \"#utility.yul\":1390:1395 */\n dup2\n /* \"#utility.yul\":1372:1396 */\n tag_16\n jump\t// in\ntag_37:\n /* \"#utility.yul\":1367:1370 */\n dup3\n /* \"#utility.yul\":1360:1397 */\n mstore\n /* \"#utility.yul\":1285:1403 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1409:1527 */\ntag_18:\n /* \"#utility.yul\":1496:1520 */\n tag_39\n /* \"#utility.yul\":1514:1519 */\n dup2\n /* \"#utility.yul\":1496:1520 */\n tag_12\n jump\t// in\ntag_39:\n /* \"#utility.yul\":1491:1494 */\n dup3\n /* \"#utility.yul\":1484:1521 */\n mstore\n /* \"#utility.yul\":1409:1527 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1533:1865 */\ntag_7:\n /* \"#utility.yul\":1654:1658 */\n 0x00\n /* \"#utility.yul\":1692:1694 */\n 0x40\n /* \"#utility.yul\":1681:1690 */\n dup3\n /* \"#utility.yul\":1677:1695 */\n add\n /* \"#utility.yul\":1669:1695 */\n swap1\n pop\n /* \"#utility.yul\":1705:1776 */\n tag_41\n /* \"#utility.yul\":1773:1774 */\n 0x00\n /* \"#utility.yul\":1762:1771 */\n dup4\n /* \"#utility.yul\":1758:1775 */\n add\n /* \"#utility.yul\":1749:1755 */\n dup6\n /* \"#utility.yul\":1705:1776 */\n tag_17\n jump\t// in\ntag_41:\n /* \"#utility.yul\":1786:1858 */\n tag_42\n /* \"#utility.yul\":1854:1856 */\n 0x20\n /* \"#utility.yul\":1843:1852 */\n dup4\n /* \"#utility.yul\":1839:1857 */\n add\n /* \"#utility.yul\":1830:1836 */\n dup5\n /* \"#utility.yul\":1786:1858 */\n tag_18\n jump\t// in\ntag_42:\n /* \"#utility.yul\":1533:1865 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n /* \"SimpleStorage.sol\":58:419 contract SimpleStorage {... */\ntag_8:\n dataSize(sub_0)\n dup1\n dataOffset(sub_0)\n 0x00\n codecopy\n 0x00\n return\nstop\n\nsub_0: assembly {\n /* \"SimpleStorage.sol\":58:419 contract SimpleStorage {... */\n mstore(0x40, 0x80)\n callvalue\n dup1\n iszero\n tag_1\n jumpi\n 0x00\n dup1\n revert\n tag_1:\n pop\n jumpi(tag_2, lt(calldatasize, 0x04))\n shr(0xe0, calldataload(0x00))\n dup1\n 0x2a1afcd9\n eq\n tag_3\n jumpi\n dup1\n 0x60fe47b1\n eq\n tag_4\n jumpi\n dup1\n 0x6d4ce63c\n eq\n tag_5\n jumpi\n tag_2:\n 0x00\n dup1\n revert\n /* \"SimpleStorage.sol\":85:107 uint public storedData */\n tag_3:\n tag_6\n tag_7\n jump\t// in\n tag_6:\n mload(0x40)\n tag_8\n swap2\n swap1\n tag_9\n jump\t// in\n tag_8:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"SimpleStorage.sol\":252:337 function set(uint x) public {... */\n tag_4:\n tag_10\n 0x04\n dup1\n calldatasize\n sub\n dup2\n add\n swap1\n tag_11\n swap2\n swap1\n tag_12\n jump\t// in\n tag_11:\n tag_13\n jump\t// in\n tag_10:\n stop\n /* \"SimpleStorage.sol\":340:417 function get() view public returns (uint retVal) {... */\n tag_5:\n tag_14\n tag_15\n jump\t// in\n tag_14:\n mload(0x40)\n tag_16\n swap2\n swap1\n tag_9\n jump\t// in\n tag_16:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n return\n /* \"SimpleStorage.sol\":85:107 uint public storedData */\n tag_7:\n sload(0x00)\n dup2\n jump\t// out\n /* \"SimpleStorage.sol\":252:337 function set(uint x) public {... */\n tag_13:\n /* \"SimpleStorage.sol\":291:312 stored(msg.sender, x) */\n 0xc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f5\n /* \"SimpleStorage.sol\":298:308 msg.sender */\n caller\n /* \"SimpleStorage.sol\":310:311 x */\n dup3\n /* \"SimpleStorage.sol\":291:312 stored(msg.sender, x) */\n mload(0x40)\n tag_18\n swap3\n swap2\n swap1\n tag_19\n jump\t// in\n tag_18:\n mload(0x40)\n dup1\n swap2\n sub\n swap1\n log1\n /* \"SimpleStorage.sol\":331:332 x */\n dup1\n /* \"SimpleStorage.sol\":318:328 storedData */\n 0x00\n /* \"SimpleStorage.sol\":318:332 storedData = x */\n dup2\n swap1\n sstore\n pop\n /* \"SimpleStorage.sol\":252:337 function set(uint x) public {... */\n pop\n jump\t// out\n /* \"SimpleStorage.sol\":340:417 function get() view public returns (uint retVal) {... */\n tag_15:\n /* \"SimpleStorage.sol\":376:387 uint retVal */\n 0x00\n /* \"SimpleStorage.sol\":402:412 storedData */\n dup1\n sload\n /* \"SimpleStorage.sol\":395:412 return storedData */\n swap1\n pop\n /* \"SimpleStorage.sol\":340:417 function get() view public returns (uint retVal) {... */\n swap1\n jump\t// out\n /* \"#utility.yul\":7:84 */\n tag_21:\n /* \"#utility.yul\":44:51 */\n 0x00\n /* \"#utility.yul\":73:78 */\n dup2\n /* \"#utility.yul\":62:78 */\n swap1\n pop\n /* \"#utility.yul\":7:84 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":90:208 */\n tag_22:\n /* \"#utility.yul\":177:201 */\n tag_34\n /* \"#utility.yul\":195:200 */\n dup2\n /* \"#utility.yul\":177:201 */\n tag_21\n jump\t// in\n tag_34:\n /* \"#utility.yul\":172:175 */\n dup3\n /* \"#utility.yul\":165:202 */\n mstore\n /* \"#utility.yul\":90:208 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":214:436 */\n tag_9:\n /* \"#utility.yul\":307:311 */\n 0x00\n /* \"#utility.yul\":345:347 */\n 0x20\n /* \"#utility.yul\":334:343 */\n dup3\n /* \"#utility.yul\":330:348 */\n add\n /* \"#utility.yul\":322:348 */\n swap1\n pop\n /* \"#utility.yul\":358:429 */\n tag_36\n /* \"#utility.yul\":426:427 */\n 0x00\n /* \"#utility.yul\":415:424 */\n dup4\n /* \"#utility.yul\":411:428 */\n add\n /* \"#utility.yul\":402:408 */\n dup5\n /* \"#utility.yul\":358:429 */\n tag_22\n jump\t// in\n tag_36:\n /* \"#utility.yul\":214:436 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":523:640 */\n tag_24:\n /* \"#utility.yul\":632:633 */\n 0x00\n /* \"#utility.yul\":629:630 */\n dup1\n /* \"#utility.yul\":622:634 */\n revert\n /* \"#utility.yul\":769:891 */\n tag_26:\n /* \"#utility.yul\":842:866 */\n tag_41\n /* \"#utility.yul\":860:865 */\n dup2\n /* \"#utility.yul\":842:866 */\n tag_21\n jump\t// in\n tag_41:\n /* \"#utility.yul\":835:840 */\n dup2\n /* \"#utility.yul\":832:867 */\n eq\n /* \"#utility.yul\":822:885 */\n tag_42\n jumpi\n /* \"#utility.yul\":881:882 */\n 0x00\n /* \"#utility.yul\":878:879 */\n dup1\n /* \"#utility.yul\":871:883 */\n revert\n /* \"#utility.yul\":822:885 */\n tag_42:\n /* \"#utility.yul\":769:891 */\n pop\n jump\t// out\n /* \"#utility.yul\":897:1036 */\n tag_27:\n /* \"#utility.yul\":943:948 */\n 0x00\n /* \"#utility.yul\":981:987 */\n dup2\n /* \"#utility.yul\":968:988 */\n calldataload\n /* \"#utility.yul\":959:988 */\n swap1\n pop\n /* \"#utility.yul\":997:1030 */\n tag_44\n /* \"#utility.yul\":1024:1029 */\n dup2\n /* \"#utility.yul\":997:1030 */\n tag_26\n jump\t// in\n tag_44:\n /* \"#utility.yul\":897:1036 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1042:1371 */\n tag_12:\n /* \"#utility.yul\":1101:1107 */\n 0x00\n /* \"#utility.yul\":1150:1152 */\n 0x20\n /* \"#utility.yul\":1138:1147 */\n dup3\n /* \"#utility.yul\":1129:1136 */\n dup5\n /* \"#utility.yul\":1125:1148 */\n sub\n /* \"#utility.yul\":1121:1153 */\n slt\n /* \"#utility.yul\":1118:1237 */\n iszero\n tag_46\n jumpi\n /* \"#utility.yul\":1156:1235 */\n tag_47\n tag_24\n jump\t// in\n tag_47:\n /* \"#utility.yul\":1118:1237 */\n tag_46:\n /* \"#utility.yul\":1276:1277 */\n 0x00\n /* \"#utility.yul\":1301:1354 */\n tag_48\n /* \"#utility.yul\":1346:1353 */\n dup5\n /* \"#utility.yul\":1337:1343 */\n dup3\n /* \"#utility.yul\":1326:1335 */\n dup6\n /* \"#utility.yul\":1322:1344 */\n add\n /* \"#utility.yul\":1301:1354 */\n tag_27\n jump\t// in\n tag_48:\n /* \"#utility.yul\":1291:1354 */\n swap2\n pop\n /* \"#utility.yul\":1247:1364 */\n pop\n /* \"#utility.yul\":1042:1371 */\n swap3\n swap2\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1377:1503 */\n tag_28:\n /* \"#utility.yul\":1414:1421 */\n 0x00\n /* \"#utility.yul\":1454:1496 */\n 0xffffffffffffffffffffffffffffffffffffffff\n /* \"#utility.yul\":1447:1452 */\n dup3\n /* \"#utility.yul\":1443:1497 */\n and\n /* \"#utility.yul\":1432:1497 */\n swap1\n pop\n /* \"#utility.yul\":1377:1503 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1509:1605 */\n tag_29:\n /* \"#utility.yul\":1546:1553 */\n 0x00\n /* \"#utility.yul\":1575:1599 */\n tag_51\n /* \"#utility.yul\":1593:1598 */\n dup3\n /* \"#utility.yul\":1575:1599 */\n tag_28\n jump\t// in\n tag_51:\n /* \"#utility.yul\":1564:1599 */\n swap1\n pop\n /* \"#utility.yul\":1509:1605 */\n swap2\n swap1\n pop\n jump\t// out\n /* \"#utility.yul\":1611:1729 */\n tag_30:\n /* \"#utility.yul\":1698:1722 */\n tag_53\n /* \"#utility.yul\":1716:1721 */\n dup2\n /* \"#utility.yul\":1698:1722 */\n tag_29\n jump\t// in\n tag_53:\n /* \"#utility.yul\":1693:1696 */\n dup3\n /* \"#utility.yul\":1686:1723 */\n mstore\n /* \"#utility.yul\":1611:1729 */\n pop\n pop\n jump\t// out\n /* \"#utility.yul\":1735:2067 */\n tag_19:\n /* \"#utility.yul\":1856:1860 */\n 0x00\n /* \"#utility.yul\":1894:1896 */\n 0x40\n /* \"#utility.yul\":1883:1892 */\n dup3\n /* \"#utility.yul\":1879:1897 */\n add\n /* \"#utility.yul\":1871:1897 */\n swap1\n pop\n /* \"#utility.yul\":1907:1978 */\n tag_55\n /* \"#utility.yul\":1975:1976 */\n 0x00\n /* \"#utility.yul\":1964:1973 */\n dup4\n /* \"#utility.yul\":1960:1977 */\n add\n /* \"#utility.yul\":1951:1957 */\n dup6\n /* \"#utility.yul\":1907:1978 */\n tag_30\n jump\t// in\n tag_55:\n /* \"#utility.yul\":1988:2060 */\n tag_56\n /* \"#utility.yul\":2056:2058 */\n 0x20\n /* \"#utility.yul\":2045:2054 */\n dup4\n /* \"#utility.yul\":2041:2059 */\n add\n /* \"#utility.yul\":2032:2038 */\n dup5\n /* \"#utility.yul\":1988:2060 */\n tag_22\n jump\t// in\n tag_56:\n /* \"#utility.yul\":1735:2067 */\n swap4\n swap3\n pop\n pop\n pop\n jump\t// out\n\n auxdata: 0xa2646970667358221220881b45c1cf7b5f362b3ed96b4caba8e72b8999be66620494dacdefbf7555593a64736f6c634300080a0033\n}\n", + "bytecode": { + "functionDebugData": { + "@_55": { + "entryPoint": null, + "id": 55, + "parameterSlots": 1, + "returnSlots": 0 + }, + "abi_decode_t_uint256_fromMemory": { + "entryPoint": 158, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256_fromMemory": { + "entryPoint": 179, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_address_to_t_address_fromStack": { + "entryPoint": 274, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 289, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { + "entryPoint": 304, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 256, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 224, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 125, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 120, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 135, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:1868:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "47:35:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57:19:2", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "73:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "67:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "67:9:2" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57:6:2" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "40:6:2", + "type": "" + } + ], + "src": "7:75:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "177:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "194:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "197:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "187:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "187:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "187:12:2" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "88:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "300:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "317:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "320:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "310:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "310:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "310:12:2" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "211:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "379:32:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "389:16:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "400:5:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "389:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "361:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "371:7:2", + "type": "" + } + ], + "src": "334:77:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "460:79:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "517:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "526:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "529:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "519:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "519:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "519:12:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "483:5:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "508:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "490:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "490:24:2" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "480:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "480:35:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "473:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "473:43:2" + }, + "nodeType": "YulIf", + "src": "470:63:2" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "453:5:2", + "type": "" + } + ], + "src": "417:122:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "608:80:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "618:22:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "633:6:2" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "627:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "627:13:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "618:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "676:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "649:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "649:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "649:33:2" + } + ] + }, + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "586:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "594:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "602:5:2", + "type": "" + } + ], + "src": "545:143:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "771:274:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "817:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "819:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "819:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "819:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "792:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "801:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "788:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "788:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "813:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "784:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "784:32:2" + }, + "nodeType": "YulIf", + "src": "781:119:2" + }, + { + "nodeType": "YulBlock", + "src": "910:128:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "925:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "939:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "929:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "954:74:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1000:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1011:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "996:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "996:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1020:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint256_fromMemory", + "nodeType": "YulIdentifier", + "src": "964:31:2" + }, + "nodeType": "YulFunctionCall", + "src": "964:64:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "954:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "741:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "752:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "764:6:2", + "type": "" + } + ], + "src": "694:351:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1096:81:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1106:65:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1121:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1128:42:2", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1117:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1117:54:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1106:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1078:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1088:7:2", + "type": "" + } + ], + "src": "1051:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1228:51:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1238:35:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1267:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "1249:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1249:24:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1238:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1210:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1220:7:2", + "type": "" + } + ], + "src": "1183:96:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1350:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1367:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1390:5:2" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "1372:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1372:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1360:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1360:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1360:37:2" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1338:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1345:3:2", + "type": "" + } + ], + "src": "1285:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1474:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1491:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1514:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "1496:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1496:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1484:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1484:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1484:37:2" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1462:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1469:3:2", + "type": "" + } + ], + "src": "1409:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1659:206:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1669:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1681:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1692:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1677:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1677:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1669:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1749:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1762:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1773:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1758:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1758:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "1705:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "1705:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1705:71:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "1830:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1843:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1854:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1839:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1839:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "1786:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "1786:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1786:72:2" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1623:9:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1635:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1643:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1654:4:2", + "type": "" + } + ], + "src": "1533:332:2" + } + ] + }, + "contents": "{\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256_fromMemory(offset, end) -> value {\n value := mload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256_fromMemory(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n}\n", + "id": 2, + "language": "Yul", + "name": "#utility.yul" + } + ], + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b5060405161038a38038061038a833981810160405281019061003291906100b3565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f53382604051610063929190610130565b60405180910390a18060008190555050610159565b600080fd5b6000819050919050565b6100908161007d565b811461009b57600080fd5b50565b6000815190506100ad81610087565b92915050565b6000602082840312156100c9576100c8610078565b5b60006100d78482850161009e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061010b826100e0565b9050919050565b61011b81610100565b82525050565b61012a8161007d565b82525050565b60006040820190506101456000830185610112565b6101526020830184610121565b9392505050565b610222806101686000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632a1afcd91461004657806360fe47b1146100645780636d4ce63c14610080575b600080fd5b61004e61009e565b60405161005b9190610109565b60405180910390f35b61007e60048036038101906100799190610155565b6100a4565b005b6100886100e7565b6040516100959190610109565b60405180910390f35b60005481565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f533826040516100d59291906101c3565b60405180910390a18060008190555050565b60008054905090565b6000819050919050565b610103816100f0565b82525050565b600060208201905061011e60008301846100fa565b92915050565b600080fd5b610132816100f0565b811461013d57600080fd5b50565b60008135905061014f81610129565b92915050565b60006020828403121561016b5761016a610124565b5b600061017984828501610140565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101ad82610182565b9050919050565b6101bd816101a2565b82525050565b60006040820190506101d860008301856101b4565b6101e560208301846100fa565b939250505056fea2646970667358221220881b45c1cf7b5f362b3ed96b4caba8e72b8999be66620494dacdefbf7555593a64736f6c634300080a0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x38A CODESIZE SUB DUP1 PUSH2 0x38A DUP4 CODECOPY DUP2 DUP2 ADD PUSH1 0x40 MSTORE DUP2 ADD SWAP1 PUSH2 0x32 SWAP2 SWAP1 PUSH2 0xB3 JUMP JUMPDEST PUSH32 0xC9DB20ADEDC6CF2B5D25252B101AB03E124902A73FCB12B753F3D1AAA2D8F9F5 CALLER DUP3 PUSH1 0x40 MLOAD PUSH2 0x63 SWAP3 SWAP2 SWAP1 PUSH2 0x130 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP POP PUSH2 0x159 JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x90 DUP2 PUSH2 0x7D JUMP JUMPDEST DUP2 EQ PUSH2 0x9B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 MLOAD SWAP1 POP PUSH2 0xAD DUP2 PUSH2 0x87 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xC9 JUMPI PUSH2 0xC8 PUSH2 0x78 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0xD7 DUP5 DUP3 DUP6 ADD PUSH2 0x9E JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x10B DUP3 PUSH2 0xE0 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x11B DUP2 PUSH2 0x100 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH2 0x12A DUP2 PUSH2 0x7D JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x145 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x112 JUMP JUMPDEST PUSH2 0x152 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0x121 JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH2 0x222 DUP1 PUSH2 0x168 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2A1AFCD9 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x60FE47B1 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x6D4CE63C EQ PUSH2 0x80 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x109 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x79 SWAP2 SWAP1 PUSH2 0x155 JUMP JUMPDEST PUSH2 0xA4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x88 PUSH2 0xE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x109 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH32 0xC9DB20ADEDC6CF2B5D25252B101AB03E124902A73FCB12B753F3D1AAA2D8F9F5 CALLER DUP3 PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP3 SWAP2 SWAP1 PUSH2 0x1C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x103 DUP2 PUSH2 0xF0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x11E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x132 DUP2 PUSH2 0xF0 JUMP JUMPDEST DUP2 EQ PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x14F DUP2 PUSH2 0x129 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16B JUMPI PUSH2 0x16A PUSH2 0x124 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x179 DUP5 DUP3 DUP6 ADD PUSH2 0x140 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AD DUP3 PUSH2 0x182 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1BD DUP2 PUSH2 0x1A2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1D8 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1B4 JUMP JUMPDEST PUSH2 0x1E5 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 SHL GASLIMIT 0xC1 0xCF PUSH28 0x5F362B3ED96B4CABA8E72B8999BE66620494DACDEFBF7555593A6473 PUSH16 0x6C634300080A00330000000000000000 ", + "sourceMap": "58:361:1:-:0;;;154:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;191:27;198:10;210:7;191:27;;;;;;;:::i;:::-;;;;;;;;237:7;224:10;:20;;;;154:95;58:361;;88:117:2;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:143::-;602:5;633:6;627:13;618:22;;649:33;676:5;649:33;:::i;:::-;545:143;;;;:::o;694:351::-;764:6;813:2;801:9;792:7;788:23;784:32;781:119;;;819:79;;:::i;:::-;781:119;939:1;964:64;1020:7;1011:6;1000:9;996:22;964:64;:::i;:::-;954:74;;910:128;694:351;;;;:::o;1051:126::-;1088:7;1128:42;1121:5;1117:54;1106:65;;1051:126;;;:::o;1183:96::-;1220:7;1249:24;1267:5;1249:24;:::i;:::-;1238:35;;1183:96;;;:::o;1285:118::-;1372:24;1390:5;1372:24;:::i;:::-;1367:3;1360:37;1285:118;;:::o;1409:::-;1496:24;1514:5;1496:24;:::i;:::-;1491:3;1484:37;1409:118;;:::o;1533:332::-;1654:4;1692:2;1681:9;1677:18;1669:26;;1705:71;1773:1;1762:9;1758:17;1749:6;1705:71;:::i;:::-;1786:72;1854:2;1843:9;1839:18;1830:6;1786:72;:::i;:::-;1533:332;;;;;:::o;58:361:1:-;;;;;;;" + }, + "deployedBytecode": { + "functionDebugData": { + "@get_79": { + "entryPoint": 231, + "id": 79, + "parameterSlots": 0, + "returnSlots": 1 + }, + "@set_71": { + "entryPoint": 164, + "id": 71, + "parameterSlots": 1, + "returnSlots": 0 + }, + "@storedData_33": { + "entryPoint": 158, + "id": 33, + "parameterSlots": 0, + "returnSlots": 0 + }, + "abi_decode_t_uint256": { + "entryPoint": 320, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_decode_tuple_t_uint256": { + "entryPoint": 341, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "abi_encode_t_address_to_t_address_fromStack": { + "entryPoint": 436, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_t_uint256_to_t_uint256_fromStack": { + "entryPoint": 250, + "id": null, + "parameterSlots": 2, + "returnSlots": 0 + }, + "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed": { + "entryPoint": 451, + "id": null, + "parameterSlots": 3, + "returnSlots": 1 + }, + "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed": { + "entryPoint": 265, + "id": null, + "parameterSlots": 2, + "returnSlots": 1 + }, + "allocate_unbounded": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 1 + }, + "cleanup_t_address": { + "entryPoint": 418, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint160": { + "entryPoint": 386, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "cleanup_t_uint256": { + "entryPoint": 240, + "id": null, + "parameterSlots": 1, + "returnSlots": 1 + }, + "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": { + "entryPoint": null, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": { + "entryPoint": 292, + "id": null, + "parameterSlots": 0, + "returnSlots": 0 + }, + "validator_revert_t_uint256": { + "entryPoint": 297, + "id": null, + "parameterSlots": 1, + "returnSlots": 0 + } + }, + "generatedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:2070:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "52:32:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "62:16:2", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "73:5:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "62:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "44:7:2", + "type": "" + } + ], + "src": "7:77:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "155:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "172:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "195:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "177:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "177:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "165:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "165:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "165:37:2" + } + ] + }, + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "143:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "150:3:2", + "type": "" + } + ], + "src": "90:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "312:124:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "322:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "334:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "345:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "330:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "330:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "322:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "402:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "415:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "426:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "411:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "411:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "358:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "358:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "358:71:2" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "284:9:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "296:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "307:4:2", + "type": "" + } + ], + "src": "214:222:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "482:35:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "492:19:2", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "508:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "502:5:2" + }, + "nodeType": "YulFunctionCall", + "src": "502:9:2" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "492:6:2" + } + ] + } + ] + }, + "name": "allocate_unbounded", + "nodeType": "YulFunctionDefinition", + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "475:6:2", + "type": "" + } + ], + "src": "442:75:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "612:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "629:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "632:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "622:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "622:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "622:12:2" + } + ] + }, + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulFunctionDefinition", + "src": "523:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "735:28:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "752:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "755:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "745:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "745:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "745:12:2" + } + ] + }, + "name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db", + "nodeType": "YulFunctionDefinition", + "src": "646:117:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "812:79:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "869:16:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "878:1:2", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "881:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "871:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "871:12:2" + }, + "nodeType": "YulExpressionStatement", + "src": "871:12:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "835:5:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "860:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint256", + "nodeType": "YulIdentifier", + "src": "842:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "842:24:2" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "832:2:2" + }, + "nodeType": "YulFunctionCall", + "src": "832:35:2" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "825:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "825:43:2" + }, + "nodeType": "YulIf", + "src": "822:63:2" + } + ] + }, + "name": "validator_revert_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "805:5:2", + "type": "" + } + ], + "src": "769:122:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "949:87:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "959:29:2", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "981:6:2" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "968:12:2" + }, + "nodeType": "YulFunctionCall", + "src": "968:20:2" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "959:5:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1024:5:2" + } + ], + "functionName": { + "name": "validator_revert_t_uint256", + "nodeType": "YulIdentifier", + "src": "997:26:2" + }, + "nodeType": "YulFunctionCall", + "src": "997:33:2" + }, + "nodeType": "YulExpressionStatement", + "src": "997:33:2" + } + ] + }, + "name": "abi_decode_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "927:6:2", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "935:3:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "943:5:2", + "type": "" + } + ], + "src": "897:139:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1108:263:2", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1154:83:2", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b", + "nodeType": "YulIdentifier", + "src": "1156:77:2" + }, + "nodeType": "YulFunctionCall", + "src": "1156:79:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1156:79:2" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1129:7:2" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1138:9:2" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1125:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1125:23:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1150:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1121:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1121:32:2" + }, + "nodeType": "YulIf", + "src": "1118:119:2" + }, + { + "nodeType": "YulBlock", + "src": "1247:117:2", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "1262:15:2", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1276:1:2", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1266:6:2", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1291:63:2", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1326:9:2" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1337:6:2" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1322:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1322:22:2" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "1346:7:2" + } + ], + "functionName": { + "name": "abi_decode_t_uint256", + "nodeType": "YulIdentifier", + "src": "1301:20:2" + }, + "nodeType": "YulFunctionCall", + "src": "1301:53:2" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1291:6:2" + } + ] + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1078:9:2", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "1089:7:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1101:6:2", + "type": "" + } + ], + "src": "1042:329:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1422:81:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1432:65:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1447:5:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1454:42:2", + "type": "", + "value": "0xffffffffffffffffffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1443:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1443:54:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1432:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_uint160", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1404:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1414:7:2", + "type": "" + } + ], + "src": "1377:126:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1554:51:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1564:35:2", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1593:5:2" + } + ], + "functionName": { + "name": "cleanup_t_uint160", + "nodeType": "YulIdentifier", + "src": "1575:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1575:24:2" + }, + "variableNames": [ + { + "name": "cleaned", + "nodeType": "YulIdentifier", + "src": "1564:7:2" + } + ] + } + ] + }, + "name": "cleanup_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1536:5:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "cleaned", + "nodeType": "YulTypedName", + "src": "1546:7:2", + "type": "" + } + ], + "src": "1509:96:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1676:53:2", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "1693:3:2" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1716:5:2" + } + ], + "functionName": { + "name": "cleanup_t_address", + "nodeType": "YulIdentifier", + "src": "1698:17:2" + }, + "nodeType": "YulFunctionCall", + "src": "1698:24:2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1686:6:2" + }, + "nodeType": "YulFunctionCall", + "src": "1686:37:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1686:37:2" + } + ] + }, + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1664:5:2", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "1671:3:2", + "type": "" + } + ], + "src": "1611:118:2" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1861:206:2", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1871:26:2", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1883:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1894:2:2", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1879:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1879:18:2" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "1871:4:2" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "1951:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1964:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1975:1:2", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1960:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "1960:17:2" + } + ], + "functionName": { + "name": "abi_encode_t_address_to_t_address_fromStack", + "nodeType": "YulIdentifier", + "src": "1907:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "1907:71:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1907:71:2" + }, + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "2032:6:2" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2045:9:2" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2056:2:2", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2041:3:2" + }, + "nodeType": "YulFunctionCall", + "src": "2041:18:2" + } + ], + "functionName": { + "name": "abi_encode_t_uint256_to_t_uint256_fromStack", + "nodeType": "YulIdentifier", + "src": "1988:43:2" + }, + "nodeType": "YulFunctionCall", + "src": "1988:72:2" + }, + "nodeType": "YulExpressionStatement", + "src": "1988:72:2" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1825:9:2", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "1837:6:2", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "1845:6:2", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "1856:4:2", + "type": "" + } + ], + "src": "1735:332:2" + } + ] + }, + "contents": "{\n\n function cleanup_t_uint256(value) -> cleaned {\n cleaned := value\n }\n\n function abi_encode_t_uint256_to_t_uint256_fromStack(value, pos) {\n mstore(pos, cleanup_t_uint256(value))\n }\n\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart , value0) -> tail {\n tail := add(headStart, 32)\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value0, add(headStart, 0))\n\n }\n\n function allocate_unbounded() -> memPtr {\n memPtr := mload(64)\n }\n\n function revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() {\n revert(0, 0)\n }\n\n function revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db() {\n revert(0, 0)\n }\n\n function validator_revert_t_uint256(value) {\n if iszero(eq(value, cleanup_t_uint256(value))) { revert(0, 0) }\n }\n\n function abi_decode_t_uint256(offset, end) -> value {\n value := calldataload(offset)\n validator_revert_t_uint256(value)\n }\n\n function abi_decode_tuple_t_uint256(headStart, dataEnd) -> value0 {\n if slt(sub(dataEnd, headStart), 32) { revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b() }\n\n {\n\n let offset := 0\n\n value0 := abi_decode_t_uint256(add(headStart, offset), dataEnd)\n }\n\n }\n\n function cleanup_t_uint160(value) -> cleaned {\n cleaned := and(value, 0xffffffffffffffffffffffffffffffffffffffff)\n }\n\n function cleanup_t_address(value) -> cleaned {\n cleaned := cleanup_t_uint160(value)\n }\n\n function abi_encode_t_address_to_t_address_fromStack(value, pos) {\n mstore(pos, cleanup_t_address(value))\n }\n\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart , value1, value0) -> tail {\n tail := add(headStart, 64)\n\n abi_encode_t_address_to_t_address_fromStack(value0, add(headStart, 0))\n\n abi_encode_t_uint256_to_t_uint256_fromStack(value1, add(headStart, 32))\n\n }\n\n}\n", + "id": 2, + "language": "Yul", + "name": "#utility.yul" + } + ], + "immutableReferences": {}, + "linkReferences": {}, + "object": "608060405234801561001057600080fd5b50600436106100415760003560e01c80632a1afcd91461004657806360fe47b1146100645780636d4ce63c14610080575b600080fd5b61004e61009e565b60405161005b9190610109565b60405180910390f35b61007e60048036038101906100799190610155565b6100a4565b005b6100886100e7565b6040516100959190610109565b60405180910390f35b60005481565b7fc9db20adedc6cf2b5d25252b101ab03e124902a73fcb12b753f3d1aaa2d8f9f533826040516100d59291906101c3565b60405180910390a18060008190555050565b60008054905090565b6000819050919050565b610103816100f0565b82525050565b600060208201905061011e60008301846100fa565b92915050565b600080fd5b610132816100f0565b811461013d57600080fd5b50565b60008135905061014f81610129565b92915050565b60006020828403121561016b5761016a610124565b5b600061017984828501610140565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101ad82610182565b9050919050565b6101bd816101a2565b82525050565b60006040820190506101d860008301856101b4565b6101e560208301846100fa565b939250505056fea2646970667358221220881b45c1cf7b5f362b3ed96b4caba8e72b8999be66620494dacdefbf7555593a64736f6c634300080a0033", + "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x41 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2A1AFCD9 EQ PUSH2 0x46 JUMPI DUP1 PUSH4 0x60FE47B1 EQ PUSH2 0x64 JUMPI DUP1 PUSH4 0x6D4CE63C EQ PUSH2 0x80 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x4E PUSH2 0x9E JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x5B SWAP2 SWAP1 PUSH2 0x109 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x7E PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 PUSH2 0x79 SWAP2 SWAP1 PUSH2 0x155 JUMP JUMPDEST PUSH2 0xA4 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x88 PUSH2 0xE7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x95 SWAP2 SWAP1 PUSH2 0x109 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x0 SLOAD DUP2 JUMP JUMPDEST PUSH32 0xC9DB20ADEDC6CF2B5D25252B101AB03E124902A73FCB12B753F3D1AAA2D8F9F5 CALLER DUP3 PUSH1 0x40 MLOAD PUSH2 0xD5 SWAP3 SWAP2 SWAP1 PUSH2 0x1C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 DUP1 PUSH1 0x0 DUP2 SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP2 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x103 DUP2 PUSH2 0xF0 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 ADD SWAP1 POP PUSH2 0x11E PUSH1 0x0 DUP4 ADD DUP5 PUSH2 0xFA JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x132 DUP2 PUSH2 0xF0 JUMP JUMPDEST DUP2 EQ PUSH2 0x13D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP2 CALLDATALOAD SWAP1 POP PUSH2 0x14F DUP2 PUSH2 0x129 JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x16B JUMPI PUSH2 0x16A PUSH2 0x124 JUMP JUMPDEST JUMPDEST PUSH1 0x0 PUSH2 0x179 DUP5 DUP3 DUP6 ADD PUSH2 0x140 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1AD DUP3 PUSH2 0x182 JUMP JUMPDEST SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x1BD DUP2 PUSH2 0x1A2 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP3 ADD SWAP1 POP PUSH2 0x1D8 PUSH1 0x0 DUP4 ADD DUP6 PUSH2 0x1B4 JUMP JUMPDEST PUSH2 0x1E5 PUSH1 0x20 DUP4 ADD DUP5 PUSH2 0xFA JUMP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP9 SHL GASLIMIT 0xC1 0xCF PUSH28 0x5F362B3ED96B4CABA8E72B8999BE66620494DACDEFBF7555593A6473 PUSH16 0x6C634300080A00330000000000000000 ", + "sourceMap": "58:361:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;85:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;252:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;340:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;85:22;;;;:::o;252:85::-;291:21;298:10;310:1;291:21;;;;;;;:::i;:::-;;;;;;;;331:1;318:10;:14;;;;252:85;:::o;340:77::-;376:11;402:10;;395:17;;340:77;:::o;7::2:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:329::-;1101:6;1150:2;1138:9;1129:7;1125:23;1121:32;1118:119;;;1156:79;;:::i;:::-;1118:119;1276:1;1301:53;1346:7;1337:6;1326:9;1322:22;1301:53;:::i;:::-;1291:63;;1247:117;1042:329;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:118::-;1698:24;1716:5;1698:24;:::i;:::-;1693:3;1686:37;1611:118;;:::o;1735:332::-;1856:4;1894:2;1883:9;1879:18;1871:26;;1907:71;1975:1;1964:9;1960:17;1951:6;1907:71;:::i;:::-;1988:72;2056:2;2045:9;2041:18;2032:6;1988:72;:::i;:::-;1735:332;;;;;:::o" + }, + "gasEstimates": { + "creation": { + "codeDepositCost": "109200", + "executionCost": "infinite", + "totalCost": "infinite" + }, + "external": { + "get()": "2459", + "set(uint256)": "infinite", + "storedData()": "2407" + } + }, + "legacyAssembly": { + ".code": [ + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "80" + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 58, + "end": 419, + "name": "MSTORE", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "CALLVALUE", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "DUP1", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "ISZERO", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSH [tag]", + "source": 1, + "value": "1" + }, + { + "begin": 154, + "end": 249, + "name": "JUMPI", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 154, + "end": 249, + "name": "DUP1", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "REVERT", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "tag", + "source": 1, + "value": "1" + }, + { + "begin": 154, + "end": 249, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "POP", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 154, + "end": 249, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSHSIZE", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "CODESIZE", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "SUB", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "DUP1", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSHSIZE", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "DUP4", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "CODECOPY", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "DUP2", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "DUP2", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "ADD", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 154, + "end": 249, + "name": "MSTORE", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "DUP2", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "ADD", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSH [tag]", + "source": 1, + "value": "2" + }, + { + "begin": 154, + "end": 249, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "PUSH [tag]", + "source": 1, + "value": "3" + }, + { + "begin": 154, + "end": 249, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 154, + "end": 249, + "name": "tag", + "source": 1, + "value": "2" + }, + { + "begin": 154, + "end": 249, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "PUSH", + "source": 1, + "value": "C9DB20ADEDC6CF2B5D25252B101AB03E124902A73FCB12B753F3D1AAA2D8F9F5" + }, + { + "begin": 198, + "end": 208, + "name": "CALLER", + "source": 1 + }, + { + "begin": 210, + "end": 217, + "name": "DUP3", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 191, + "end": 218, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "PUSH [tag]", + "source": 1, + "value": "6" + }, + { + "begin": 191, + "end": 218, + "name": "SWAP3", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "PUSH [tag]", + "source": 1, + "value": "7" + }, + { + "begin": 191, + "end": 218, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 191, + "end": 218, + "name": "tag", + "source": 1, + "value": "6" + }, + { + "begin": 191, + "end": 218, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 191, + "end": 218, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "DUP1", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "SUB", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 191, + "end": 218, + "name": "LOG1", + "source": 1 + }, + { + "begin": 237, + "end": 244, + "name": "DUP1", + "source": 1 + }, + { + "begin": 224, + "end": 234, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 224, + "end": 244, + "name": "DUP2", + "source": 1 + }, + { + "begin": 224, + "end": 244, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 224, + "end": 244, + "name": "SSTORE", + "source": 1 + }, + { + "begin": 224, + "end": 244, + "name": "POP", + "source": 1 + }, + { + "begin": 154, + "end": 249, + "name": "POP", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH [tag]", + "source": 1, + "value": "8" + }, + { + "begin": 58, + "end": 419, + "name": "JUMP", + "source": 1 + }, + { + "begin": 88, + "end": 205, + "name": "tag", + "source": 2, + "value": "10" + }, + { + "begin": 88, + "end": 205, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 197, + "end": 198, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 194, + "end": 195, + "name": "DUP1", + "source": 2 + }, + { + "begin": 187, + "end": 199, + "name": "REVERT", + "source": 2 + }, + { + "begin": 334, + "end": 411, + "name": "tag", + "source": 2, + "value": "12" + }, + { + "begin": 334, + "end": 411, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 371, + "end": 378, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 400, + "end": 405, + "name": "DUP2", + "source": 2 + }, + { + "begin": 389, + "end": 405, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 389, + "end": 405, + "name": "POP", + "source": 2 + }, + { + "begin": 334, + "end": 411, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 334, + "end": 411, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 334, + "end": 411, + "name": "POP", + "source": 2 + }, + { + "begin": 334, + "end": 411, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 417, + "end": 539, + "name": "tag", + "source": 2, + "value": "13" + }, + { + "begin": 417, + "end": 539, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 2, + "value": "25" + }, + { + "begin": 508, + "end": 513, + "name": "DUP2", + "source": 2 + }, + { + "begin": 490, + "end": 514, + "name": "PUSH [tag]", + "source": 2, + "value": "12" + }, + { + "begin": 490, + "end": 514, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 490, + "end": 514, + "name": "tag", + "source": 2, + "value": "25" + }, + { + "begin": 490, + "end": 514, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 483, + "end": 488, + "name": "DUP2", + "source": 2 + }, + { + "begin": 480, + "end": 515, + "name": "EQ", + "source": 2 + }, + { + "begin": 470, + "end": 533, + "name": "PUSH [tag]", + "source": 2, + "value": "26" + }, + { + "begin": 470, + "end": 533, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 529, + "end": 530, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 526, + "end": 527, + "name": "DUP1", + "source": 2 + }, + { + "begin": 519, + "end": 531, + "name": "REVERT", + "source": 2 + }, + { + "begin": 470, + "end": 533, + "name": "tag", + "source": 2, + "value": "26" + }, + { + "begin": 470, + "end": 533, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 417, + "end": 539, + "name": "POP", + "source": 2 + }, + { + "begin": 417, + "end": 539, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 545, + "end": 688, + "name": "tag", + "source": 2, + "value": "14" + }, + { + "begin": 545, + "end": 688, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 602, + "end": 607, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 633, + "end": 639, + "name": "DUP2", + "source": 2 + }, + { + "begin": 627, + "end": 640, + "name": "MLOAD", + "source": 2 + }, + { + "begin": 618, + "end": 640, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 618, + "end": 640, + "name": "POP", + "source": 2 + }, + { + "begin": 649, + "end": 682, + "name": "PUSH [tag]", + "source": 2, + "value": "28" + }, + { + "begin": 676, + "end": 681, + "name": "DUP2", + "source": 2 + }, + { + "begin": 649, + "end": 682, + "name": "PUSH [tag]", + "source": 2, + "value": "13" + }, + { + "begin": 649, + "end": 682, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 649, + "end": 682, + "name": "tag", + "source": 2, + "value": "28" + }, + { + "begin": 649, + "end": 682, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 545, + "end": 688, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 545, + "end": 688, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 545, + "end": 688, + "name": "POP", + "source": 2 + }, + { + "begin": 545, + "end": 688, + "name": "POP", + "source": 2 + }, + { + "begin": 545, + "end": 688, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 694, + "end": 1045, + "name": "tag", + "source": 2, + "value": "3" + }, + { + "begin": 694, + "end": 1045, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 764, + "end": 770, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 813, + "end": 815, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { + "begin": 801, + "end": 810, + "name": "DUP3", + "source": 2 + }, + { + "begin": 792, + "end": 799, + "name": "DUP5", + "source": 2 + }, + { + "begin": 788, + "end": 811, + "name": "SUB", + "source": 2 + }, + { + "begin": 784, + "end": 816, + "name": "SLT", + "source": 2 + }, + { + "begin": 781, + "end": 900, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 781, + "end": 900, + "name": "PUSH [tag]", + "source": 2, + "value": "30" + }, + { + "begin": 781, + "end": 900, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 819, + "end": 898, + "name": "PUSH [tag]", + "source": 2, + "value": "31" + }, + { + "begin": 819, + "end": 898, + "name": "PUSH [tag]", + "source": 2, + "value": "10" + }, + { + "begin": 819, + "end": 898, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 819, + "end": 898, + "name": "tag", + "source": 2, + "value": "31" + }, + { + "begin": 819, + "end": 898, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 781, + "end": 900, + "name": "tag", + "source": 2, + "value": "30" + }, + { + "begin": 781, + "end": 900, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 939, + "end": 940, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 964, + "end": 1028, + "name": "PUSH [tag]", + "source": 2, + "value": "32" + }, + { + "begin": 1020, + "end": 1027, + "name": "DUP5", + "source": 2 + }, + { + "begin": 1011, + "end": 1017, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1000, + "end": 1009, + "name": "DUP6", + "source": 2 + }, + { + "begin": 996, + "end": 1018, + "name": "ADD", + "source": 2 + }, + { + "begin": 964, + "end": 1028, + "name": "PUSH [tag]", + "source": 2, + "value": "14" + }, + { + "begin": 964, + "end": 1028, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 964, + "end": 1028, + "name": "tag", + "source": 2, + "value": "32" + }, + { + "begin": 964, + "end": 1028, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 954, + "end": 1028, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 954, + "end": 1028, + "name": "POP", + "source": 2 + }, + { + "begin": 910, + "end": 1038, + "name": "POP", + "source": 2 + }, + { + "begin": 694, + "end": 1045, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 694, + "end": 1045, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 694, + "end": 1045, + "name": "POP", + "source": 2 + }, + { + "begin": 694, + "end": 1045, + "name": "POP", + "source": 2 + }, + { + "begin": 694, + "end": 1045, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1051, + "end": 1177, + "name": "tag", + "source": 2, + "value": "15" + }, + { + "begin": 1051, + "end": 1177, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1088, + "end": 1095, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1128, + "end": 1170, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1121, + "end": 1126, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1117, + "end": 1171, + "name": "AND", + "source": 2 + }, + { + "begin": 1106, + "end": 1171, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1106, + "end": 1171, + "name": "POP", + "source": 2 + }, + { + "begin": 1051, + "end": 1177, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1051, + "end": 1177, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1051, + "end": 1177, + "name": "POP", + "source": 2 + }, + { + "begin": 1051, + "end": 1177, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1183, + "end": 1279, + "name": "tag", + "source": 2, + "value": "16" + }, + { + "begin": 1183, + "end": 1279, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1220, + "end": 1227, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1249, + "end": 1273, + "name": "PUSH [tag]", + "source": 2, + "value": "35" + }, + { + "begin": 1267, + "end": 1272, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1249, + "end": 1273, + "name": "PUSH [tag]", + "source": 2, + "value": "15" + }, + { + "begin": 1249, + "end": 1273, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1249, + "end": 1273, + "name": "tag", + "source": 2, + "value": "35" + }, + { + "begin": 1249, + "end": 1273, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1238, + "end": 1273, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1238, + "end": 1273, + "name": "POP", + "source": 2 + }, + { + "begin": 1183, + "end": 1279, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1183, + "end": 1279, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1183, + "end": 1279, + "name": "POP", + "source": 2 + }, + { + "begin": 1183, + "end": 1279, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1285, + "end": 1403, + "name": "tag", + "source": 2, + "value": "17" + }, + { + "begin": 1285, + "end": 1403, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1372, + "end": 1396, + "name": "PUSH [tag]", + "source": 2, + "value": "37" + }, + { + "begin": 1390, + "end": 1395, + "name": "DUP2", + "source": 2 + }, + { + "begin": 1372, + "end": 1396, + "name": "PUSH [tag]", + "source": 2, + "value": "16" + }, + { + "begin": 1372, + "end": 1396, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1372, + "end": 1396, + "name": "tag", + "source": 2, + "value": "37" + }, + { + "begin": 1372, + "end": 1396, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1367, + "end": 1370, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1360, + "end": 1397, + "name": "MSTORE", + "source": 2 + }, + { + "begin": 1285, + "end": 1403, + "name": "POP", + "source": 2 + }, + { + "begin": 1285, + "end": 1403, + "name": "POP", + "source": 2 + }, + { + "begin": 1285, + "end": 1403, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1409, + "end": 1527, + "name": "tag", + "source": 2, + "value": "18" + }, + { + "begin": 1409, + "end": 1527, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1496, + "end": 1520, + "name": "PUSH [tag]", + "source": 2, + "value": "39" + }, + { + "begin": 1514, + "end": 1519, + "name": "DUP2", + "source": 2 + }, + { + "begin": 1496, + "end": 1520, + "name": "PUSH [tag]", + "source": 2, + "value": "12" + }, + { + "begin": 1496, + "end": 1520, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1496, + "end": 1520, + "name": "tag", + "source": 2, + "value": "39" + }, + { + "begin": 1496, + "end": 1520, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1491, + "end": 1494, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1484, + "end": 1521, + "name": "MSTORE", + "source": 2 + }, + { + "begin": 1409, + "end": 1527, + "name": "POP", + "source": 2 + }, + { + "begin": 1409, + "end": 1527, + "name": "POP", + "source": 2 + }, + { + "begin": 1409, + "end": 1527, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1533, + "end": 1865, + "name": "tag", + "source": 2, + "value": "7" + }, + { + "begin": 1533, + "end": 1865, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1654, + "end": 1658, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1692, + "end": 1694, + "name": "PUSH", + "source": 2, + "value": "40" + }, + { + "begin": 1681, + "end": 1690, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1677, + "end": 1695, + "name": "ADD", + "source": 2 + }, + { + "begin": 1669, + "end": 1695, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1669, + "end": 1695, + "name": "POP", + "source": 2 + }, + { + "begin": 1705, + "end": 1776, + "name": "PUSH [tag]", + "source": 2, + "value": "41" + }, + { + "begin": 1773, + "end": 1774, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1762, + "end": 1771, + "name": "DUP4", + "source": 2 + }, + { + "begin": 1758, + "end": 1775, + "name": "ADD", + "source": 2 + }, + { + "begin": 1749, + "end": 1755, + "name": "DUP6", + "source": 2 + }, + { + "begin": 1705, + "end": 1776, + "name": "PUSH [tag]", + "source": 2, + "value": "17" + }, + { + "begin": 1705, + "end": 1776, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1705, + "end": 1776, + "name": "tag", + "source": 2, + "value": "41" + }, + { + "begin": 1705, + "end": 1776, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1786, + "end": 1858, + "name": "PUSH [tag]", + "source": 2, + "value": "42" + }, + { + "begin": 1854, + "end": 1856, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { + "begin": 1843, + "end": 1852, + "name": "DUP4", + "source": 2 + }, + { + "begin": 1839, + "end": 1857, + "name": "ADD", + "source": 2 + }, + { + "begin": 1830, + "end": 1836, + "name": "DUP5", + "source": 2 + }, + { + "begin": 1786, + "end": 1858, + "name": "PUSH [tag]", + "source": 2, + "value": "18" + }, + { + "begin": 1786, + "end": 1858, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1786, + "end": 1858, + "name": "tag", + "source": 2, + "value": "42" + }, + { + "begin": 1786, + "end": 1858, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1533, + "end": 1865, + "name": "SWAP4", + "source": 2 + }, + { + "begin": 1533, + "end": 1865, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 1533, + "end": 1865, + "name": "POP", + "source": 2 + }, + { + "begin": 1533, + "end": 1865, + "name": "POP", + "source": 2 + }, + { + "begin": 1533, + "end": 1865, + "name": "POP", + "source": 2 + }, + { + "begin": 1533, + "end": 1865, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 58, + "end": 419, + "name": "tag", + "source": 1, + "value": "8" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH #[$]", + "source": 1, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 58, + "end": 419, + "name": "DUP1", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH [$]", + "source": 1, + "value": "0000000000000000000000000000000000000000000000000000000000000000" + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 58, + "end": 419, + "name": "CODECOPY", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 58, + "end": 419, + "name": "RETURN", + "source": 1 + } + ], + ".data": { + "0": { + ".auxdata": "a2646970667358221220881b45c1cf7b5f362b3ed96b4caba8e72b8999be66620494dacdefbf7555593a64736f6c634300080a0033", + ".code": [ + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "80" + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 58, + "end": 419, + "name": "MSTORE", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "CALLVALUE", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "DUP1", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "ISZERO", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH [tag]", + "source": 1, + "value": "1" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPI", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 58, + "end": 419, + "name": "DUP1", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "REVERT", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "tag", + "source": 1, + "value": "1" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "POP", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { + "begin": 58, + "end": 419, + "name": "CALLDATASIZE", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "LT", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH [tag]", + "source": 1, + "value": "2" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPI", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 58, + "end": 419, + "name": "CALLDATALOAD", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "E0" + }, + { + "begin": 58, + "end": 419, + "name": "SHR", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "DUP1", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "2A1AFCD9" + }, + { + "begin": 58, + "end": 419, + "name": "EQ", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH [tag]", + "source": 1, + "value": "3" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPI", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "DUP1", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "60FE47B1" + }, + { + "begin": 58, + "end": 419, + "name": "EQ", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH [tag]", + "source": 1, + "value": "4" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPI", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "DUP1", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "6D4CE63C" + }, + { + "begin": 58, + "end": 419, + "name": "EQ", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH [tag]", + "source": 1, + "value": "5" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPI", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "tag", + "source": 1, + "value": "2" + }, + { + "begin": 58, + "end": 419, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 58, + "end": 419, + "name": "DUP1", + "source": 1 + }, + { + "begin": 58, + "end": 419, + "name": "REVERT", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "tag", + "source": 1, + "value": "3" + }, + { + "begin": 85, + "end": 107, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "PUSH [tag]", + "source": 1, + "value": "6" + }, + { + "begin": 85, + "end": 107, + "name": "PUSH [tag]", + "source": 1, + "value": "7" + }, + { + "begin": 85, + "end": 107, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 85, + "end": 107, + "name": "tag", + "source": 1, + "value": "6" + }, + { + "begin": 85, + "end": 107, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 85, + "end": 107, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "PUSH [tag]", + "source": 1, + "value": "8" + }, + { + "begin": 85, + "end": 107, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "PUSH [tag]", + "source": 1, + "value": "9" + }, + { + "begin": 85, + "end": 107, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 85, + "end": 107, + "name": "tag", + "source": 1, + "value": "8" + }, + { + "begin": 85, + "end": 107, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 85, + "end": 107, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "DUP1", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "SUB", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "RETURN", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "tag", + "source": 1, + "value": "4" + }, + { + "begin": 252, + "end": 337, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "PUSH [tag]", + "source": 1, + "value": "10" + }, + { + "begin": 252, + "end": 337, + "name": "PUSH", + "source": 1, + "value": "4" + }, + { + "begin": 252, + "end": 337, + "name": "DUP1", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "CALLDATASIZE", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "SUB", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "DUP2", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "ADD", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "PUSH [tag]", + "source": 1, + "value": "11" + }, + { + "begin": 252, + "end": 337, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "PUSH [tag]", + "source": 1, + "value": "12" + }, + { + "begin": 252, + "end": 337, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 252, + "end": 337, + "name": "tag", + "source": 1, + "value": "11" + }, + { + "begin": 252, + "end": 337, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "PUSH [tag]", + "source": 1, + "value": "13" + }, + { + "begin": 252, + "end": 337, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 252, + "end": 337, + "name": "tag", + "source": 1, + "value": "10" + }, + { + "begin": 252, + "end": 337, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "STOP", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "tag", + "source": 1, + "value": "5" + }, + { + "begin": 340, + "end": 417, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "PUSH [tag]", + "source": 1, + "value": "14" + }, + { + "begin": 340, + "end": 417, + "name": "PUSH [tag]", + "source": 1, + "value": "15" + }, + { + "begin": 340, + "end": 417, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 340, + "end": 417, + "name": "tag", + "source": 1, + "value": "14" + }, + { + "begin": 340, + "end": 417, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 340, + "end": 417, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "PUSH [tag]", + "source": 1, + "value": "16" + }, + { + "begin": 340, + "end": 417, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "PUSH [tag]", + "source": 1, + "value": "9" + }, + { + "begin": 340, + "end": 417, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 340, + "end": 417, + "name": "tag", + "source": 1, + "value": "16" + }, + { + "begin": 340, + "end": 417, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 340, + "end": 417, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "DUP1", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "SUB", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "RETURN", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "tag", + "source": 1, + "value": "7" + }, + { + "begin": 85, + "end": 107, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 85, + "end": 107, + "name": "SLOAD", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "DUP2", + "source": 1 + }, + { + "begin": 85, + "end": 107, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 252, + "end": 337, + "name": "tag", + "source": 1, + "value": "13" + }, + { + "begin": 252, + "end": 337, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "PUSH", + "source": 1, + "value": "C9DB20ADEDC6CF2B5D25252B101AB03E124902A73FCB12B753F3D1AAA2D8F9F5" + }, + { + "begin": 298, + "end": 308, + "name": "CALLER", + "source": 1 + }, + { + "begin": 310, + "end": 311, + "name": "DUP3", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 291, + "end": 312, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "PUSH [tag]", + "source": 1, + "value": "18" + }, + { + "begin": 291, + "end": 312, + "name": "SWAP3", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "PUSH [tag]", + "source": 1, + "value": "19" + }, + { + "begin": 291, + "end": 312, + "name": "JUMP", + "source": 1, + "value": "[in]" + }, + { + "begin": 291, + "end": 312, + "name": "tag", + "source": 1, + "value": "18" + }, + { + "begin": 291, + "end": 312, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "PUSH", + "source": 1, + "value": "40" + }, + { + "begin": 291, + "end": 312, + "name": "MLOAD", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "DUP1", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "SWAP2", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "SUB", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 291, + "end": 312, + "name": "LOG1", + "source": 1 + }, + { + "begin": 331, + "end": 332, + "name": "DUP1", + "source": 1 + }, + { + "begin": 318, + "end": 328, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 318, + "end": 332, + "name": "DUP2", + "source": 1 + }, + { + "begin": 318, + "end": 332, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 318, + "end": 332, + "name": "SSTORE", + "source": 1 + }, + { + "begin": 318, + "end": 332, + "name": "POP", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "POP", + "source": 1 + }, + { + "begin": 252, + "end": 337, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 340, + "end": 417, + "name": "tag", + "source": 1, + "value": "15" + }, + { + "begin": 340, + "end": 417, + "name": "JUMPDEST", + "source": 1 + }, + { + "begin": 376, + "end": 387, + "name": "PUSH", + "source": 1, + "value": "0" + }, + { + "begin": 402, + "end": 412, + "name": "DUP1", + "source": 1 + }, + { + "begin": 402, + "end": 412, + "name": "SLOAD", + "source": 1 + }, + { + "begin": 395, + "end": 412, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 395, + "end": 412, + "name": "POP", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "SWAP1", + "source": 1 + }, + { + "begin": 340, + "end": 417, + "name": "JUMP", + "source": 1, + "value": "[out]" + }, + { + "begin": 7, + "end": 84, + "name": "tag", + "source": 2, + "value": "21" + }, + { + "begin": 7, + "end": 84, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 44, + "end": 51, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 73, + "end": 78, + "name": "DUP2", + "source": 2 + }, + { + "begin": 62, + "end": 78, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 62, + "end": 78, + "name": "POP", + "source": 2 + }, + { + "begin": 7, + "end": 84, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 7, + "end": 84, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 7, + "end": 84, + "name": "POP", + "source": 2 + }, + { + "begin": 7, + "end": 84, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 90, + "end": 208, + "name": "tag", + "source": 2, + "value": "22" + }, + { + "begin": 90, + "end": 208, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 2, + "value": "34" + }, + { + "begin": 195, + "end": 200, + "name": "DUP2", + "source": 2 + }, + { + "begin": 177, + "end": 201, + "name": "PUSH [tag]", + "source": 2, + "value": "21" + }, + { + "begin": 177, + "end": 201, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 177, + "end": 201, + "name": "tag", + "source": 2, + "value": "34" + }, + { + "begin": 177, + "end": 201, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 172, + "end": 175, + "name": "DUP3", + "source": 2 + }, + { + "begin": 165, + "end": 202, + "name": "MSTORE", + "source": 2 + }, + { + "begin": 90, + "end": 208, + "name": "POP", + "source": 2 + }, + { + "begin": 90, + "end": 208, + "name": "POP", + "source": 2 + }, + { + "begin": 90, + "end": 208, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 214, + "end": 436, + "name": "tag", + "source": 2, + "value": "9" + }, + { + "begin": 214, + "end": 436, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 307, + "end": 311, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 345, + "end": 347, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { + "begin": 334, + "end": 343, + "name": "DUP3", + "source": 2 + }, + { + "begin": 330, + "end": 348, + "name": "ADD", + "source": 2 + }, + { + "begin": 322, + "end": 348, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 322, + "end": 348, + "name": "POP", + "source": 2 + }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 2, + "value": "36" + }, + { + "begin": 426, + "end": 427, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 415, + "end": 424, + "name": "DUP4", + "source": 2 + }, + { + "begin": 411, + "end": 428, + "name": "ADD", + "source": 2 + }, + { + "begin": 402, + "end": 408, + "name": "DUP5", + "source": 2 + }, + { + "begin": 358, + "end": 429, + "name": "PUSH [tag]", + "source": 2, + "value": "22" + }, + { + "begin": 358, + "end": 429, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 358, + "end": 429, + "name": "tag", + "source": 2, + "value": "36" + }, + { + "begin": 358, + "end": 429, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 214, + "end": 436, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 214, + "end": 436, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 214, + "end": 436, + "name": "POP", + "source": 2 + }, + { + "begin": 214, + "end": 436, + "name": "POP", + "source": 2 + }, + { + "begin": 214, + "end": 436, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 523, + "end": 640, + "name": "tag", + "source": 2, + "value": "24" + }, + { + "begin": 523, + "end": 640, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 632, + "end": 633, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 629, + "end": 630, + "name": "DUP1", + "source": 2 + }, + { + "begin": 622, + "end": 634, + "name": "REVERT", + "source": 2 + }, + { + "begin": 769, + "end": 891, + "name": "tag", + "source": 2, + "value": "26" + }, + { + "begin": 769, + "end": 891, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 2, + "value": "41" + }, + { + "begin": 860, + "end": 865, + "name": "DUP2", + "source": 2 + }, + { + "begin": 842, + "end": 866, + "name": "PUSH [tag]", + "source": 2, + "value": "21" + }, + { + "begin": 842, + "end": 866, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 842, + "end": 866, + "name": "tag", + "source": 2, + "value": "41" + }, + { + "begin": 842, + "end": 866, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 835, + "end": 840, + "name": "DUP2", + "source": 2 + }, + { + "begin": 832, + "end": 867, + "name": "EQ", + "source": 2 + }, + { + "begin": 822, + "end": 885, + "name": "PUSH [tag]", + "source": 2, + "value": "42" + }, + { + "begin": 822, + "end": 885, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 881, + "end": 882, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 878, + "end": 879, + "name": "DUP1", + "source": 2 + }, + { + "begin": 871, + "end": 883, + "name": "REVERT", + "source": 2 + }, + { + "begin": 822, + "end": 885, + "name": "tag", + "source": 2, + "value": "42" + }, + { + "begin": 822, + "end": 885, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 769, + "end": 891, + "name": "POP", + "source": 2 + }, + { + "begin": 769, + "end": 891, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 897, + "end": 1036, + "name": "tag", + "source": 2, + "value": "27" + }, + { + "begin": 897, + "end": 1036, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 943, + "end": 948, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 981, + "end": 987, + "name": "DUP2", + "source": 2 + }, + { + "begin": 968, + "end": 988, + "name": "CALLDATALOAD", + "source": 2 + }, + { + "begin": 959, + "end": 988, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 959, + "end": 988, + "name": "POP", + "source": 2 + }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 2, + "value": "44" + }, + { + "begin": 1024, + "end": 1029, + "name": "DUP2", + "source": 2 + }, + { + "begin": 997, + "end": 1030, + "name": "PUSH [tag]", + "source": 2, + "value": "26" + }, + { + "begin": 997, + "end": 1030, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 997, + "end": 1030, + "name": "tag", + "source": 2, + "value": "44" + }, + { + "begin": 997, + "end": 1030, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 897, + "end": 1036, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 897, + "end": 1036, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 897, + "end": 1036, + "name": "POP", + "source": 2 + }, + { + "begin": 897, + "end": 1036, + "name": "POP", + "source": 2 + }, + { + "begin": 897, + "end": 1036, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1042, + "end": 1371, + "name": "tag", + "source": 2, + "value": "12" + }, + { + "begin": 1042, + "end": 1371, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1101, + "end": 1107, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1150, + "end": 1152, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { + "begin": 1138, + "end": 1147, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1129, + "end": 1136, + "name": "DUP5", + "source": 2 + }, + { + "begin": 1125, + "end": 1148, + "name": "SUB", + "source": 2 + }, + { + "begin": 1121, + "end": 1153, + "name": "SLT", + "source": 2 + }, + { + "begin": 1118, + "end": 1237, + "name": "ISZERO", + "source": 2 + }, + { + "begin": 1118, + "end": 1237, + "name": "PUSH [tag]", + "source": 2, + "value": "46" + }, + { + "begin": 1118, + "end": 1237, + "name": "JUMPI", + "source": 2 + }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 2, + "value": "47" + }, + { + "begin": 1156, + "end": 1235, + "name": "PUSH [tag]", + "source": 2, + "value": "24" + }, + { + "begin": 1156, + "end": 1235, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1156, + "end": 1235, + "name": "tag", + "source": 2, + "value": "47" + }, + { + "begin": 1156, + "end": 1235, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1118, + "end": 1237, + "name": "tag", + "source": 2, + "value": "46" + }, + { + "begin": 1118, + "end": 1237, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1276, + "end": 1277, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 2, + "value": "48" + }, + { + "begin": 1346, + "end": 1353, + "name": "DUP5", + "source": 2 + }, + { + "begin": 1337, + "end": 1343, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1326, + "end": 1335, + "name": "DUP6", + "source": 2 + }, + { + "begin": 1322, + "end": 1344, + "name": "ADD", + "source": 2 + }, + { + "begin": 1301, + "end": 1354, + "name": "PUSH [tag]", + "source": 2, + "value": "27" + }, + { + "begin": 1301, + "end": 1354, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1301, + "end": 1354, + "name": "tag", + "source": 2, + "value": "48" + }, + { + "begin": 1301, + "end": 1354, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1291, + "end": 1354, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1291, + "end": 1354, + "name": "POP", + "source": 2 + }, + { + "begin": 1247, + "end": 1364, + "name": "POP", + "source": 2 + }, + { + "begin": 1042, + "end": 1371, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 1042, + "end": 1371, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1042, + "end": 1371, + "name": "POP", + "source": 2 + }, + { + "begin": 1042, + "end": 1371, + "name": "POP", + "source": 2 + }, + { + "begin": 1042, + "end": 1371, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1377, + "end": 1503, + "name": "tag", + "source": 2, + "value": "28" + }, + { + "begin": 1377, + "end": 1503, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1414, + "end": 1421, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1454, + "end": 1496, + "name": "PUSH", + "source": 2, + "value": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + }, + { + "begin": 1447, + "end": 1452, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1443, + "end": 1497, + "name": "AND", + "source": 2 + }, + { + "begin": 1432, + "end": 1497, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1432, + "end": 1497, + "name": "POP", + "source": 2 + }, + { + "begin": 1377, + "end": 1503, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1377, + "end": 1503, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1377, + "end": 1503, + "name": "POP", + "source": 2 + }, + { + "begin": 1377, + "end": 1503, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1509, + "end": 1605, + "name": "tag", + "source": 2, + "value": "29" + }, + { + "begin": 1509, + "end": 1605, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1546, + "end": 1553, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1575, + "end": 1599, + "name": "PUSH [tag]", + "source": 2, + "value": "51" + }, + { + "begin": 1593, + "end": 1598, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1575, + "end": 1599, + "name": "PUSH [tag]", + "source": 2, + "value": "28" + }, + { + "begin": 1575, + "end": 1599, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1575, + "end": 1599, + "name": "tag", + "source": 2, + "value": "51" + }, + { + "begin": 1575, + "end": 1599, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1564, + "end": 1599, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1564, + "end": 1599, + "name": "POP", + "source": 2 + }, + { + "begin": 1509, + "end": 1605, + "name": "SWAP2", + "source": 2 + }, + { + "begin": 1509, + "end": 1605, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1509, + "end": 1605, + "name": "POP", + "source": 2 + }, + { + "begin": 1509, + "end": 1605, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1611, + "end": 1729, + "name": "tag", + "source": 2, + "value": "30" + }, + { + "begin": 1611, + "end": 1729, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1698, + "end": 1722, + "name": "PUSH [tag]", + "source": 2, + "value": "53" + }, + { + "begin": 1716, + "end": 1721, + "name": "DUP2", + "source": 2 + }, + { + "begin": 1698, + "end": 1722, + "name": "PUSH [tag]", + "source": 2, + "value": "29" + }, + { + "begin": 1698, + "end": 1722, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1698, + "end": 1722, + "name": "tag", + "source": 2, + "value": "53" + }, + { + "begin": 1698, + "end": 1722, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1693, + "end": 1696, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1686, + "end": 1723, + "name": "MSTORE", + "source": 2 + }, + { + "begin": 1611, + "end": 1729, + "name": "POP", + "source": 2 + }, + { + "begin": 1611, + "end": 1729, + "name": "POP", + "source": 2 + }, + { + "begin": 1611, + "end": 1729, + "name": "JUMP", + "source": 2, + "value": "[out]" + }, + { + "begin": 1735, + "end": 2067, + "name": "tag", + "source": 2, + "value": "19" + }, + { + "begin": 1735, + "end": 2067, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1856, + "end": 1860, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1894, + "end": 1896, + "name": "PUSH", + "source": 2, + "value": "40" + }, + { + "begin": 1883, + "end": 1892, + "name": "DUP3", + "source": 2 + }, + { + "begin": 1879, + "end": 1897, + "name": "ADD", + "source": 2 + }, + { + "begin": 1871, + "end": 1897, + "name": "SWAP1", + "source": 2 + }, + { + "begin": 1871, + "end": 1897, + "name": "POP", + "source": 2 + }, + { + "begin": 1907, + "end": 1978, + "name": "PUSH [tag]", + "source": 2, + "value": "55" + }, + { + "begin": 1975, + "end": 1976, + "name": "PUSH", + "source": 2, + "value": "0" + }, + { + "begin": 1964, + "end": 1973, + "name": "DUP4", + "source": 2 + }, + { + "begin": 1960, + "end": 1977, + "name": "ADD", + "source": 2 + }, + { + "begin": 1951, + "end": 1957, + "name": "DUP6", + "source": 2 + }, + { + "begin": 1907, + "end": 1978, + "name": "PUSH [tag]", + "source": 2, + "value": "30" + }, + { + "begin": 1907, + "end": 1978, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1907, + "end": 1978, + "name": "tag", + "source": 2, + "value": "55" + }, + { + "begin": 1907, + "end": 1978, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1988, + "end": 2060, + "name": "PUSH [tag]", + "source": 2, + "value": "56" + }, + { + "begin": 2056, + "end": 2058, + "name": "PUSH", + "source": 2, + "value": "20" + }, + { + "begin": 2045, + "end": 2054, + "name": "DUP4", + "source": 2 + }, + { + "begin": 2041, + "end": 2059, + "name": "ADD", + "source": 2 + }, + { + "begin": 2032, + "end": 2038, + "name": "DUP5", + "source": 2 + }, + { + "begin": 1988, + "end": 2060, + "name": "PUSH [tag]", + "source": 2, + "value": "22" + }, + { + "begin": 1988, + "end": 2060, + "name": "JUMP", + "source": 2, + "value": "[in]" + }, + { + "begin": 1988, + "end": 2060, + "name": "tag", + "source": 2, + "value": "56" + }, + { + "begin": 1988, + "end": 2060, + "name": "JUMPDEST", + "source": 2 + }, + { + "begin": 1735, + "end": 2067, + "name": "SWAP4", + "source": 2 + }, + { + "begin": 1735, + "end": 2067, + "name": "SWAP3", + "source": 2 + }, + { + "begin": 1735, + "end": 2067, + "name": "POP", + "source": 2 + }, + { + "begin": 1735, + "end": 2067, + "name": "POP", + "source": 2 + }, + { + "begin": 1735, + "end": 2067, + "name": "POP", + "source": 2 + }, + { + "begin": 1735, + "end": 2067, + "name": "JUMP", + "source": 2, + "value": "[out]" + } + ] + } + } + }, + "methodIdentifiers": { + "get()": "6d4ce63c", + "set(uint256)": "60fe47b1", + "storedData()": "2a1afcd9" + } + }, + "ewasm": { + "wasm": "" + }, + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"initVal\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"stored\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"get\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"retVal\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"}],\"name\":\"set\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"storedData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"SimpleStorage.sol\":\"SimpleStorage\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"SimpleStorage.sol\":{\"keccak256\":\"0x9654322cff2317684b96778a9a48f094b9009d7787c01578bbf037933085f1c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82b29a2357eefdf4b77808fd71a85fea9edc08367ee3381945725d8794280a10\",\"dweb:/ipfs/QmUW1VFao5YYkpFt8GX2HGmAvCKQnQyCziGZPSfC8XB1dK\"]}},\"version\":1}", + "storageLayout": { + "storage": [ + { + "astId": 33, + "contract": "SimpleStorage.sol:SimpleStorage", + "label": "storedData", + "offset": 0, + "slot": "0", + "type": "t_uint256" + } + ], + "types": { + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } +} diff --git a/smart_contracts/contracts/SimpleStorage.sol b/smart_contracts/contracts/SimpleStorage.sol new file mode 100644 index 0000000..88acd97 --- /dev/null +++ b/smart_contracts/contracts/SimpleStorage.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.10; + +contract SimpleStorage { + uint public storedData; + event stored(address _to, uint _amount); + constructor(uint initVal) { + emit stored(msg.sender, initVal); + storedData = initVal; + } + function set(uint x) public { + emit stored(msg.sender, x); + storedData = x; + } + function get() view public returns (uint retVal) { + return storedData; + } +} diff --git a/smart_contracts/package.json b/smart_contracts/package.json new file mode 100644 index 0000000..500b915 --- /dev/null +++ b/smart_contracts/package.json @@ -0,0 +1,27 @@ +{ + "name": "@consensys-software/smart_contracts", + "version": "1.0.0", + "description": "Example smart contracts for trying out Quorum", + "scripts": { + "compile": "node scripts/compile.js", + "deploy": "node scripts/deploy.js", + "public-transaction": "node scripts/public_tx.js", + "private-transaction": "node scripts/private_tx.js" + }, + "license": "Apache-2.0", + "dependencies": { + "async-promise-pool": "^1.0.6", + "fs-extra": "^10.0.0", + "solc": "0.8.10", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^1.0.0", + "ethers": "6.7.1", + "hardhat-gas-reporter": "^1.0.8", + "@ethereumjs/common": "^4.0.0", + "@ethereumjs/tx": "^5.0.0", + "web3js-quorum": "22.4.0", + "web3": "1.10.2" + } +} diff --git a/smart_contracts/scripts/compile.js b/smart_contracts/scripts/compile.js new file mode 100644 index 0000000..8a9b5e1 --- /dev/null +++ b/smart_contracts/scripts/compile.js @@ -0,0 +1,62 @@ +const path = require('path'); +const fs = require('fs-extra'); +const solc = require('solc'); + +const contractsPath = path.resolve(__dirname, '../', 'contracts'); + +function buildSources() { + const sources = {}; + const contractsFiles = fs.readdirSync(contractsPath); + contractsFiles.forEach(file => { + if(file.endsWith(".sol")){ + const contractFullPath = path.resolve(contractsPath, file); + sources[file] = { + content: fs.readFileSync(contractFullPath, 'utf8') + }; + } + }); + return sources; +} + +const input = { + language: 'Solidity', + sources: buildSources(), + settings: { + outputSelection: { + '*': { + '*': [ '*', 'evm.bytecode' ] + } + } + } +} + +function compileContracts() { + const stringifiedJson = JSON.stringify(input); + console.log(stringifiedJson) + const compilationResult = solc.compile(stringifiedJson); + console.log(compilationResult) + const output = JSON.parse(compilationResult); + console.log(output) + const compiledContracts = output.contracts; + for (let contract in compiledContracts) { + for(let contractName in compiledContracts[contract]) { + console.log(contract) + fs.outputJsonSync( + path.resolve(contractsPath, `${contractName}.json`), + compiledContracts[contract][contractName], { spaces: 2 } + ) + } + } +} + +const main = () => { + compileContracts(); +} + +if (require.main === module) { + main(); +} + +module.exports = exports = main + + diff --git a/smart_contracts/scripts/keys.js b/smart_contracts/scripts/keys.js new file mode 100644 index 0000000..4661636 --- /dev/null +++ b/smart_contracts/scripts/keys.js @@ -0,0 +1,74 @@ +// WARNING: the keys here are demo purposes ONLY. Please use a tool like EthSigner for production, rather than hard coding private keys + +module.exports = { + tessera: { + member1: { + publicKey: "BULeR8JyUWhiuuCMU/HLA0Q5pzkYT+cHII3ZKBey3Bo=", + }, + member2: { + publicKey: "QfeDAys9MPDs2XHExtc84jKGHxZg/aj52DTh0vtA3Xc=", + }, + member3: { + publicKey: "1iTZde/ndBHvzhcl7V68x44Vx7pl8nwx9LqnM/AfJUg=", + }, + }, + besu: { + rpcnode: { + name: "rpcnode", + url: "http://127.0.0.1:8545", + wsUrl: "ws://127.0.0.1:8546", + nodekey: + "0e93a540518eeb673d94fb496b746008ab56605463cb9212493997f5755124d1", + accountAddress: "c9c913c8c3c1cd416d80a0abf475db2062f161f6", + accountPrivateKey: + "0x60bbe10a196a4e71451c0f6e9ec9beab454c2a5ac0542aa5b8b733ff5719fec3", + }, + member1: { + name: "member1", + url: "http://127.0.0.1:20000", + wsUrl: "ws://127.0.0.1:20001", + privateUrl: "http://127.0.0.1:9081", + nodekey: + "0xb9a4bd1539c15bcc83fa9078fe89200b6e9e802ae992f13cd83c853f16e8bed4", + accountAddress: "0xf0e2db6c8dc6c681bb5d6ad121a107f300e9b2b5", + accountPrivateKey: + "8bbbb1b345af56b560a5b20bd4b0ed1cd8cc9958a16262bc75118453cb546df7", + }, + member2: { + name: "member2", + url: "http://127.0.0.1:20002", + wsUrl: "ws://127.0.0.1:20003", + privateUrl: "http://127.0.0.1:9082", + nodekey: + "f18166704e19b895c1e2698ebc82b4e007e6d2933f4b31be23662dd0ec602570", + accountAddress: "0xca843569e3427144cead5e4d5999a3d0ccf92b8e", + accountPrivateKey: + "4762e04d10832808a0aebdaa79c12de54afbe006bfffd228b3abcc494fe986f9", + }, + member3: { + name: "member3", + url: "http://127.0.0.1:20004", + wsUrl: "ws://127.0.0.1:20005", + privateUrl: "http://127.0.0.1:9083", + nodekey: + "4107f0b6bf67a3bc679a15fe36f640415cf4da6a4820affaac89c8b280dfd1b3", + accountAddress: "0x0fbdc686b912d7722dc86510934589e0aaf3b55a", + accountPrivateKey: + "61dced5af778942996880120b303fc11ee28cc8e5036d2fdff619b5675ded3f0", + }, + }, + accounts: { + a: { + address: "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73", + privateKey: "0x8f2a55949038a9610f50fb23b5883af3b4ecb3c3bb792cbcefbd1542c692be63", + }, + b: { + address: "0x627306090abaB3A6e1400e9345bC60c78a8BEf57", + privateKey: "0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3", + }, + c: { + address: "0xf17f52151EbEF6C7334FAD080c5704D77216b732", + privateKey: "0xae6ae8e5ccbfb04590405997ee2d52d2b330726137b875053c36d94e974d162f", + }, + }, +}; diff --git a/smart_contracts/scripts/privacy/concurrent_private_txs.js b/smart_contracts/scripts/privacy/concurrent_private_txs.js new file mode 100644 index 0000000..fe49b4c --- /dev/null +++ b/smart_contracts/scripts/privacy/concurrent_private_txs.js @@ -0,0 +1,130 @@ +const Web3 = require("web3"); +const Web3Quorum = require("web3js-quorum"); +const Tx = require("ethereumjs-tx"); +const PromisePool = require("async-promise-pool"); +const { tessera, besu } = require("../keys.js"); + +const chainId = 1337; +const web3 = new Web3Quorum(new Web3(besu.member1.url), chainId); + +/* + Transactions are sent in batches. + TX_COUNT defines the total of transactions + BATCH_SIZE defines how many transactions will be sent at once +*/ +const TX_COUNT = 100; +const BATCH_SIZE = 5; + +// options used to create a privacy group with only one member +const privacyOptions = { + privateFrom: tessera.member1.publicKey, + privateFor: [tessera.member1.publicKey], + privateKey: besu.member1.accountPrivateKey, +}; + +const deployContractData = + "0x608060405234801561001057600080fd5b5060405161018e38038061018e8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050806000819055507f85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410816040518082815260200191505060405180910390a15060fd806100916000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c806360fe47b11460375780636d4ce63c146062575b600080fd5b606060048036036020811015604b57600080fd5b8101908080359060200190929190505050607e565b005b606860bf565b6040518082815260200191505060405180910390f35b806000819055507f85bea11d86cefb165374e0f727bacf21dc2f4ea816493981ecf72dcfb212a410816040518082815260200191505060405180910390a150565b6000805490509056fea265627a7a723158207735a32daa767059dd230ee7718eb7f09ff35ca8ba54249b53ea1c2e12b98f8564736f6c634300051100320000000000000000000000000000000000000000000000000000000000000001"; + +// get nonce of account in the privacy group +function getPrivateNonce(account) { + return web3.priv.getTransactionCount( + account, + web3.utils.generatePrivacyGroup(privacyOptions) + ); +} + +// get public nonce of account +function getPublicNonce(account) { + return web3.eth.getTransactionCount(account, "pending"); +} + +// distribute payload to participants +function distributePayload(payload, nonce) { + return web3.priv.generateAndDistributeRawTransaction({ + ...privacyOptions, + data: payload, + nonce, + }); +} + +// create and sign PMT +function sendPMT(sender, enclaveKey, nonce) { + const rawTx = { + nonce: web3.utils.numberToHex(nonce), // PMT nonce + from: sender, + to: "0x000000000000000000000000000000000000007e", // privacy precompile address + data: enclaveKey, + gasLimit: "0x5a88", + }; + + const tx = new Tx(rawTx); + tx.sign(Buffer.from(besu.member1.accountPrivateKey, "hex")); + + const hexTx = `0x${tx.serialize().toString("hex")}`; + + // eslint-disable-next-line promise/avoid-new + return new Promise((resolve, reject) => { + web3.eth + .sendSignedTransaction(hexTx) + .once("receipt", (rcpt) => { + resolve(rcpt); + }) + .on("error", (error) => { + reject(error); + }); + }); +} + +function printPrivTxDetails(pmtRcpt) { + return web3.priv + .waitForTransactionReceipt(pmtRcpt.transactionHash) + .then((privTxRcpt) => { + console.log( + `=== Private TX ${privTxRcpt.transactionHash}\n` + + ` > Status ${privTxRcpt.status}\n` + + ` > Block #${pmtRcpt.blockNumber}\n` + + ` > PMT Index #${pmtRcpt.transactionIndex}\n` + + ` > PMT Hash ${pmtRcpt.transactionHash}\n` + ); + return Promise.resolve(); + }); +} + +/* + Example of sending private transactions in batch. + + The basic steps are: + + 1. Find the expected public and private nonce for the sender account + 2. Ditribute the private transaction (incrementing the private nonce) + 3. Create a PMT for each private transaction (incrementing the public nonce) +*/ +module.exports = async () => { + const sender = "0xfe3b557e8fb62b89f4916b721be55ceb828dbd73"; + + const privateNonce = await getPrivateNonce(sender); + const publicNonce = await getPublicNonce(sender); + + const pool = new PromisePool({ concurrency: BATCH_SIZE }); + + for (let i = 0; i < TX_COUNT; i += 1) { + pool.add(() => { + return distributePayload(deployContractData, privateNonce + i) + .then((enclaveKey) => { + return sendPMT(sender, enclaveKey, publicNonce + i); + }) + .then(printPrivTxDetails); + }); + } + + await pool.all(); +}; + +if (require.main === module) { + module.exports().catch((error) => { + console.log(error); + console.log( + "\nThis example requires ONCHAIN privacy to be DISABLED. \nCheck config for ONCHAIN privacy groups." + ); + }); +} diff --git a/smart_contracts/scripts/privacy/private_tx.js b/smart_contracts/scripts/privacy/private_tx.js new file mode 100644 index 0000000..0e4e359 --- /dev/null +++ b/smart_contracts/scripts/privacy/private_tx.js @@ -0,0 +1,200 @@ +const path = require("path"); +const fs = require("fs-extra"); +const Web3 = require("web3"); +const Web3Quorum = require("web3js-quorum"); + +// WARNING: the keys here are demo purposes ONLY. Please use a tool like EthSigner for production, rather than hard coding private keys +const { tessera, besu } = require("../keys.js"); +const chainId = 1337; +// abi and bytecode generated from simplestorage.sol: +// > solcjs --bin --abi simplestorage.sol +const contractJsonPath = path.resolve( + __dirname, + "../../", + "contracts", + "SimpleStorage.json" +); +const contractJson = JSON.parse(fs.readFileSync(contractJsonPath)); +const contractBytecode = contractJson.evm.bytecode.object; +const contractAbi = contractJson.abi; + +// Besu doesn't support eth_sendTransaction so we use the eea_sendRawTransaction(https://besu.hyperledger.org/en/latest/Reference/API-Methods/#eea_sendrawtransaction) for things like simple value transfers, contract creation or contract invocation +async function createContract( + clientUrl, + fromPrivateKey, + fromPublicKey, + toPublicKey +) { + const web3 = new Web3(clientUrl); + const web3quorum = new Web3Quorum(web3, chainId); + // initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode + const contractConstructorInit = web3.eth.abi + .encodeParameter("uint256", "47") + .slice(2); + const txOptions = { + data: "0x" + contractBytecode + contractConstructorInit, + privateKey: fromPrivateKey, + privateFrom: fromPublicKey, + privateFor: [toPublicKey], + }; + console.log("Creating contract..."); + // Generate and send the Raw transaction to the Besu node using the eea_sendRawTransaction(https://besu.hyperledger.org/en/latest/Reference/API-Methods/#eea_sendrawtransaction) JSON-RPC call + const txHash = await web3quorum.priv.generateAndSendRawTransaction(txOptions); + console.log("Getting contractAddress from txHash: ", txHash); + const privateTxReceipt = await web3quorum.priv.waitForTransactionReceipt( + txHash + ); + console.log("Private Transaction Receipt: ", privateTxReceipt); + return privateTxReceipt; +} + +async function getValueAtAddress( + clientUrl, + nodeName = "node", + address, + contractAbi, + fromPrivateKey, + fromPublicKey, + toPublicKey +) { + const web3 = new Web3(clientUrl); + const web3quorum = new Web3Quorum(web3, chainId); + const contract = new web3quorum.eth.Contract(contractAbi); + // eslint-disable-next-line no-underscore-dangle + const functionAbi = contract._jsonInterface.find((e) => { + return e.name === "get"; + }); + const functionParams = { + to: address, + data: functionAbi.signature, + privateKey: fromPrivateKey, + privateFrom: fromPublicKey, + privateFor: [toPublicKey], + }; + const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( + functionParams + ); + // console.log(`Transaction hash: ${transactionHash}`); + const result = await web3quorum.priv.waitForTransactionReceipt( + transactionHash + ); + console.log( + "" + nodeName + " value from deployed contract is: " + result.output + ); + return result; +} + +async function setValueAtAddress( + clientUrl, + address, + value, + contractAbi, + fromPrivateKey, + fromPublicKey, + toPublicKey +) { + const web3 = new Web3(clientUrl); + const web3quorum = new Web3Quorum(web3, chainId); + const contract = new web3quorum.eth.Contract(contractAbi); + // eslint-disable-next-line no-underscore-dangle + const functionAbi = contract._jsonInterface.find((e) => { + return e.name === "set"; + }); + const functionArgs = web3quorum.eth.abi + .encodeParameters(functionAbi.inputs, [value]) + .slice(2); + const functionParams = { + to: address, + data: functionAbi.signature + functionArgs, + privateKey: fromPrivateKey, + privateFrom: fromPublicKey, + privateFor: [toPublicKey], + }; + const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( + functionParams + ); + console.log(`Transaction hash: ${transactionHash}`); + const result = await web3quorum.priv.waitForTransactionReceipt( + transactionHash + ); + return result; +} + +async function main() { + createContract( + besu.member1.url, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + tessera.member3.publicKey + ) + .then(async function (privateTxReceipt) { + console.log("Address of transaction: ", privateTxReceipt.contractAddress); + let newValue = 123; + + //wait for the blocks to propogate to the other nodes + await new Promise((r) => setTimeout(r, 20000)); + console.log( + "Use the smart contracts 'get' function to read the contract's constructor initialized value .. " + ); + await getValueAtAddress( + besu.member1.url, + "Member1", + privateTxReceipt.contractAddress, + contractAbi, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + tessera.member3.publicKey + ); + console.log( + `Use the smart contracts 'set' function to update that value to ${newValue} .. - from member1 to member3` + ); + await setValueAtAddress( + besu.member1.url, + privateTxReceipt.contractAddress, + newValue, + contractAbi, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + tessera.member3.publicKey + ); + //wait for the blocks to propogate to the other nodes + await new Promise((r) => setTimeout(r, 20000)); + console.log( + "Verify the private transaction is private by reading the value from all three members .. " + ); + await getValueAtAddress( + besu.member1.url, + "Member1", + privateTxReceipt.contractAddress, + contractAbi, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + tessera.member3.publicKey + ); + await getValueAtAddress( + besu.member2.url, + "Member2", + privateTxReceipt.contractAddress, + contractAbi, + besu.member2.accountPrivateKey, + tessera.member2.publicKey, + tessera.member1.publicKey + ); + await getValueAtAddress( + besu.member3.url, + "Member3", + privateTxReceipt.contractAddress, + contractAbi, + besu.member3.accountPrivateKey, + tessera.member3.publicKey, + tessera.member1.publicKey + ); + }) + .catch(console.error); +} + +if (require.main === module) { + main(); +} + +module.exports = exports = main; diff --git a/smart_contracts/scripts/privacy/private_tx_privacy_group.js b/smart_contracts/scripts/privacy/private_tx_privacy_group.js new file mode 100644 index 0000000..cda5aaa --- /dev/null +++ b/smart_contracts/scripts/privacy/private_tx_privacy_group.js @@ -0,0 +1,232 @@ +const path = require("path"); +const fs = require("fs-extra"); +const Web3 = require("web3"); +const Web3Quorum = require("web3js-quorum"); + +// WARNING: the keys here are demo purposes ONLY. Please use a tool like EthSigner for production, rather than hard coding private keys +const { tessera, besu } = require("../keys.js"); +const chainId = 1337; +// abi and bytecode generated from simplestorage.sol: +// > solcjs --bin --abi simplestorage.sol +const contractJsonPath = path.resolve( + __dirname, + "../../", + "contracts", + "SimpleStorage.json" +); +const contractJson = JSON.parse(fs.readFileSync(contractJsonPath)); +const contractBytecode = contractJson.evm.bytecode.object; +const contractAbi = contractJson.abi; +// initialize the default constructor with a value `47 = 0x2F`; this value is appended to the bytecode +const contractConstructorInit = + "000000000000000000000000000000000000000000000000000000000000002F"; + +async function createPrivacyGroup(clientUrl, participantList) { + const web3 = new Web3(clientUrl); + const web3quorum = new Web3Quorum(web3, chainId); + const contractOptions = { + addresses: participantList, + name: "web3js-quorum", + description: "quickstart", + }; + const result = await web3.priv.createPrivacyGroup(contractOptions); + console.log( + "Privacy group: " + + result + + " created between participants: " + + participantList + ); + return result; +} + +// Besu doesn't support eth_sendTransaction so we use the eea_sendRawTransaction for things like simple value transfers, contract creation or contract invocation +async function createContract( + clientUrl, + privacyGroupId, + fromPrivateKey, + fromPublicKey +) { + const web3 = new Web3(clientUrl); + const web3quorum = new Web3Quorum(web3, chainId); + const txOptions = { + data: "0x" + contractBytecode + contractConstructorInit, + privateKey: fromPrivateKey, + privateFrom: fromPublicKey, + privacyGroupId: privacyGroupId, + }; + console.log("Creating contract..."); + // Generate and send the Raw transaction to the Besu node using the eea_sendRawTransaction JSON-RPC call + const txHash = await web3quorum.priv.generateAndSendRawTransaction(txOptions); + console.log("Getting contractAddress from txHash: ", txHash); + const privateTxReceipt = await web3quorum.priv.waitForTransactionReceipt( + txHash + ); + console.log("Private Transaction Receipt: ", privateTxReceipt); + return privateTxReceipt; +} + +async function getValueAtAddress( + clientUrl, + nodeName = "node", + address, + contractAbi, + fromPrivateKey, + fromPublicKey, + privacyGroupId +) { + const web3 = new Web3(clientUrl); + const web3quorum = new Web3Quorum(web3, chainId); + const contract = new web3quorum.eth.Contract(contractAbi); + // eslint-disable-next-line no-underscore-dangle + const functionAbi = contract._jsonInterface.find((e) => { + return e.name === "get"; + }); + const functionParams = { + to: address, + data: functionAbi.signature, + privateKey: fromPrivateKey, + privateFrom: fromPublicKey, + privacyGroupId: privacyGroupId, + }; + const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( + functionParams + ); + // console.log(`Transaction hash: ${transactionHash}`); + const result = await web3quorum.priv.waitForTransactionReceipt( + transactionHash + ); + console.log( + "" + nodeName + " value from deployed contract is: " + result.output + ); + return result; +} + +async function setValueAtAddress( + clientUrl, + address, + value, + contractAbi, + fromPrivateKey, + fromPublicKey, + privacyGroupId +) { + const web3 = new Web3(clientUrl); + const web3quorum = new Web3Quorum(web3, chainId); + const contract = new web3quorum.eth.Contract(contractAbi); + // eslint-disable-next-line no-underscore-dangle + const functionAbi = contract._jsonInterface.find((e) => { + return e.name === "set"; + }); + const functionArgs = web3quorum.eth.abi + .encodeParameters(functionAbi.inputs, [value]) + .slice(2); + const functionParams = { + to: address, + data: functionAbi.signature + functionArgs, + privateKey: fromPrivateKey, + privateFrom: fromPublicKey, + privacyGroupId, + }; + const transactionHash = await web3quorum.priv.generateAndSendRawTransaction( + functionParams + ); + console.log(`Transaction hash: ${transactionHash}`); + const result = await web3quorum.priv.waitForTransactionReceipt( + transactionHash + ); + return result; +} + +async function main() { + const participantList = [ + tessera.member1.publicKey, + tessera.member3.publicKey, + ]; + const privacyGroupId = await createPrivacyGroup( + besu.member1.url, + participantList + ); + createContract( + besu.member1.url, + privacyGroupId, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + tessera.member3.publicKey + ) + .then(async function (privateTxReceipt) { + console.log("Address of transaction: ", privateTxReceipt.contractAddress); + let newValue = 123; + + //wait for the blocks to propogate to the other nodes + await new Promise((r) => setTimeout(r, 10000)); + console.log( + "Use the smart contracts 'get' function to read the contract's constructor initialized value .. " + ); + await getValueAtAddress( + besu.member1.url, + "Member1", + privateTxReceipt.contractAddress, + contractAbi, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + privacyGroupId + ); + console.log( + `Use the smart contracts 'set' function to update that value to ${newValue} .. - from member1 to member3` + ); + await setValueAtAddress( + besu.member1.url, + privateTxReceipt.contractAddress, + newValue, + contractAbi, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + privacyGroupId + ); + //wait for the blocks to propogate to the other nodes + await new Promise((r) => setTimeout(r, 10000)); + console.log( + "Verify the private transaction is private by reading the value from all three members .. " + ); + await getValueAtAddress( + besu.member1.url, + "Member1", + privateTxReceipt.contractAddress, + contractAbi, + besu.member1.accountPrivateKey, + tessera.member1.publicKey, + privacyGroupId + ).catch(() => { + console.log("Member1 cannot obtain value"); + }); + await getValueAtAddress( + besu.member2.url, + "Member2", + privateTxReceipt.contractAddress, + contractAbi, + besu.member2.accountPrivateKey, + tessera.member2.publicKey, + privacyGroupId + ).catch(() => { + console.log("Member2 cannot obtain value"); + }); + await getValueAtAddress( + besu.member3.url, + "Member3", + privateTxReceipt.contractAddress, + contractAbi, + besu.member3.accountPrivateKey, + tessera.member3.publicKey, + privacyGroupId + ).catch(() => { + console.log("Member3 cannot obtain value"); + }); + }) + .catch(console.error); +} + +if (require.main === module) { + main(); +} + +module.exports = exports = main; diff --git a/smart_contracts/scripts/public/hre_1559_public_tx.js b/smart_contracts/scripts/public/hre_1559_public_tx.js new file mode 100644 index 0000000..b45609f --- /dev/null +++ b/smart_contracts/scripts/public/hre_1559_public_tx.js @@ -0,0 +1,88 @@ +const path = require('path'); +const fs = require('fs-extra'); +var ethers = require('ethers'); + +// RPCNODE details +const { tessera, besu } = require("../keys.js"); +const host = besu.rpcnode.url; +const accountPrivateKey = besu.rpcnode.accountPrivateKey; + +// abi and bytecode generated from simplestorage.sol: +// > solcjs --bin --abi simplestorage.sol +const contractJsonPath = path.resolve(__dirname, '../../','contracts','Counter.json'); +const contractJson = JSON.parse(fs.readFileSync(contractJsonPath)); +const contractAbi = contractJson.abi; +const contractBytecode = contractJson.evm.bytecode.object + +async function getValueAtAddress(provider, deployedContractAbi, deployedContractAddress){ + const contract = new ethers.Contract(deployedContractAddress, deployedContractAbi, provider); + const res = await contract.getCount(); + console.log("Obtained value at deployed contract is: "+ res); + return res +} + +// You need to use the accountAddress details provided to Quorum to send/interact with contracts +async function incrementValueAtAddress(provider, wallet, deployedContractAbi, deployedContractAddress){ + const contract = new ethers.Contract(deployedContractAddress, deployedContractAbi, provider); + const contractWithSigner = contract.connect(wallet); + const tx = await contractWithSigner.incrementCounter(); + // verify the updated value + await tx.wait(); + // const res = await contract.get(); + // console.log("Obtained value at deployed contract is: "+ res); + return tx; +} + +async function decrementValueAtAddress(provider, wallet, deployedContractAbi, deployedContractAddress){ + const contract = new ethers.Contract(deployedContractAddress, deployedContractAbi, provider); + const contractWithSigner = contract.connect(wallet); + const tx = await contractWithSigner.decrementCounter(); + // verify the updated value + await tx.wait(); + // const res = await contract.get(); + // console.log("Obtained value at deployed contract is: "+ res); + return tx; +} + +async function createContract(provider, wallet, contractAbi, contractByteCode) { + const feeData = await provider.getFeeData(); + const factory = new ethers.ContractFactory(contractAbi, contractByteCode, wallet); + const contract = await factory.deploy({ + chainId: 1337, + type: 2, + maxPriorityFeePerGas: feeData["maxPriorityFeePerGas"], + maxFeePerGas: feeData["maxFeePerGas"], + }); + // The contract is NOT deployed yet; we must wait until it is mined + const deployed = await contract.waitForDeployment(); + //The contract is deployed now + return contract +}; + +async function main(){ + const provider = new ethers.JsonRpcProvider(host); + const wallet = new ethers.Wallet(accountPrivateKey, provider); + + createContract(provider, wallet, contractAbi, contractBytecode) + .then(async function(contract){ + console.log(contract); + contractAddress = await contract.getAddress(); + console.log("Use the smart contracts 'get' function to read the contract's initialized value .. " ) + await getValueAtAddress(provider, contractAbi, contractAddress); + console.log("Use the smart contracts 'increment' function to update that value .. " ); + await incrementValueAtAddress(provider, wallet, contractAbi, contractAddress ); + console.log("Verify the updated value that was set .. " ) + await getValueAtAddress(provider, contractAbi, contractAddress); + console.log("Use the smart contracts 'decrement' function to update that value .. " ); + await decrementValueAtAddress(provider, wallet, contractAbi, contractAddress ); + console.log("Verify the updated value that was set .. " ) + await getValueAtAddress(provider, contractAbi, contractAddress); + }) + .catch(console.error); +} + +if (require.main === module) { + main(); +} + +module.exports = exports = main diff --git a/smart_contracts/scripts/public/hre_eth_tx.js b/smart_contracts/scripts/public/hre_eth_tx.js new file mode 100644 index 0000000..ac3b856 --- /dev/null +++ b/smart_contracts/scripts/public/hre_eth_tx.js @@ -0,0 +1,55 @@ +const path = require('path'); +const fs = require('fs-extra'); +var ethers = require('ethers'); + +// member1 details +const { accounts, besu } = require("../keys.js"); +const host = besu.rpcnode.url; +// one of the seeded accounts +const accountAPrivateKey = accounts.a.privateKey; + +async function main(){ + const provider = new ethers.JsonRpcProvider(host); + + const walletA = new ethers.Wallet(accountAPrivateKey, provider); + var accountABalance = await provider.getBalance(walletA.address); + console.log("Account A has balance of: " + accountABalance); + + // create a new account to use to transfer eth to + const walletB = ethers.Wallet.createRandom() + var accountBBalance = await provider.getBalance(walletB.address); + console.log("Account B has balance of: " + accountBBalance); + + const nonce = await provider.getTransactionCount(walletA.address); + const feeData = await provider.getFeeData(); + const gasLimit = await provider.estimateGas({from: walletA.address, value: ethers.parseEther("0.01")}); + + // send some eth from A to B + const txn = { + nonce: nonce, + from: walletA.address, + to: walletB.address, + value: 0x10, //amount of eth to transfer + gasPrice: feeData.gasPrice, //ETH per unit of gas + gasLimit: gasLimit //max number of gas units the tx is allowed to use + }; + + console.log("create and sign the txn") + const signedTx = await walletA.sendTransaction(txn); + await signedTx.wait(); + console.log("tx transactionHash: " + signedTx.hash); + + //After the transaction there should be some ETH transferred + accountABalance = await provider.getBalance(walletA.address); + console.log("Account A has balance of: " + accountABalance); + accountBBalance = await provider.getBalance(walletB.address); + console.log("Account B has balance of: " + accountBBalance); + +} + +if (require.main === module) { + main(); +} + +module.exports = exports = main + diff --git a/smart_contracts/scripts/public/hre_public_tx.js b/smart_contracts/scripts/public/hre_public_tx.js new file mode 100644 index 0000000..0fd8a1d --- /dev/null +++ b/smart_contracts/scripts/public/hre_public_tx.js @@ -0,0 +1,69 @@ +const path = require('path'); +const fs = require('fs-extra'); +var ethers = require('ethers'); + +// RPCNODE details +const { tessera, besu } = require("../keys.js"); +const host = besu.rpcnode.url; +const accountPrivateKey = besu.rpcnode.accountPrivateKey; + +// abi and bytecode generated from simplestorage.sol: +// > solcjs --bin --abi simplestorage.sol +const contractJsonPath = path.resolve(__dirname, '../../','contracts','SimpleStorage.json'); +const contractJson = JSON.parse(fs.readFileSync(contractJsonPath)); +const contractAbi = contractJson.abi; +const contractBytecode = contractJson.evm.bytecode.object + +async function getValueAtAddress(provider, deployedContractAbi, deployedContractAddress){ + const contract = new ethers.Contract(deployedContractAddress, deployedContractAbi, provider); + const res = await contract.get(); + console.log("Obtained value at deployed contract is: "+ res); + return res +} + +// You need to use the accountAddress details provided to Quorum to send/interact with contracts +async function setValueAtAddress(provider, wallet, deployedContractAbi, deployedContractAddress, value){ + const contract = new ethers.Contract(deployedContractAddress, deployedContractAbi, provider); + const contractWithSigner = contract.connect(wallet); + const tx = await contractWithSigner.set(value); + // verify the updated value + await tx.wait(); + // const res = await contract.get(); + // console.log("Obtained value at deployed contract is: "+ res); + return tx; +} + +async function createContract(provider, wallet, contractAbi, contractByteCode, contractInit) { + const factory = new ethers.ContractFactory(contractAbi, contractByteCode, wallet); + const contract = await factory.deploy(contractInit); + // The contract is NOT deployed yet; we must wait until it is mined + const deployed = await contract.waitForDeployment(); + //The contract is deployed now + return contract +}; + +async function main(){ + const provider = new ethers.JsonRpcProvider(host); + const wallet = new ethers.Wallet(accountPrivateKey, provider); + + createContract(provider, wallet, contractAbi, contractBytecode, 47) + .then(async function(contract){ + contractAddress = await contract.getAddress(); + console.log("Contract deployed at address: " + contractAddress); + console.log("Use the smart contracts 'get' function to read the contract's constructor initialized value .. " ) + await getValueAtAddress(provider, contractAbi, contractAddress); + console.log("Use the smart contracts 'set' function to update that value to 123 .. " ); + await setValueAtAddress(provider, wallet, contractAbi, contractAddress, 123 ); + console.log("Verify the updated value that was set .. " ) + await getValueAtAddress(provider, contractAbi, contractAddress); + // await getAllPastEvents(host, contractAbi, tx.contractAddress); + }) + .catch(console.error); + +} + +if (require.main === module) { + main(); +} + +module.exports = exports = main \ No newline at end of file diff --git a/smart_contracts/scripts/public/web3_eth_tx.js b/smart_contracts/scripts/public/web3_eth_tx.js new file mode 100644 index 0000000..e94115b --- /dev/null +++ b/smart_contracts/scripts/public/web3_eth_tx.js @@ -0,0 +1,52 @@ +const path = require('path'); +const fs = require('fs-extra'); +const Web3 = require('web3'); + +// member1 details +const { tessera, besu, accounts } = require("../keys.js"); +const host = besu.rpcnode.url; + +async function main(){ + const web3 = new Web3(host); + //pre seeded account - test account only + + const privateKeyA = accounts.a.privateKey; + const accountA = web3.eth.accounts.privateKeyToAccount(privateKeyA); + var accountABalance = web3.utils.fromWei(await web3.eth.getBalance(accountA.address)); + console.log("Account A has balance of: " + accountABalance); + + // create a new account to use to transfer eth to + var accountB = web3.eth.accounts.create(); + var accountBBalance = web3.utils.fromWei(await web3.eth.getBalance(accountB.address)); + console.log("Account B has balance of: " + accountBBalance); + + // send some eth from A to B + const txn = { + nonce: web3.utils.numberToHex(await web3.eth.getTransactionCount(accountA.address)), + from: accountA.address, + to: accountB.address, + value: "0x100", //amount of eth to transfer + gasPrice: "0x0", //ETH per unit of gas + gasLimit: "0x24A22" //max number of gas units the tx is allowed to use + }; + + console.log("create and sign the txn") + const signedTx = await web3.eth.accounts.signTransaction(txn, accountA.privateKey); + console.log("sending the txn") + const txReceipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction); + console.log("tx transactionHash: " + txReceipt.transactionHash); + + //After the transaction there should be some ETH transferred + accountABalance = web3.utils.fromWei(await web3.eth.getBalance(accountA.address)); + console.log("Account A has an updated balance of: " + accountABalance); + accountBBalance = web3.utils.fromWei(await web3.eth.getBalance(accountB.address)); + console.log("Account B has an updated balance of: " + accountBBalance); + +} + +if (require.main === module) { + main(); +} + +module.exports = exports = main + diff --git a/splunk/log4j2.xml b/splunk/log4j2.xml new file mode 100644 index 0000000..8b01707 --- /dev/null +++ b/splunk/log4j2.xml @@ -0,0 +1,46 @@ + + + + ${env:LOG_LEVEL:-INFO} + ${env:LOGGER:-Console} + ${env:HOST:-${docker:containerId:-${hostName:-locahost}}} + ${env:SPLUNK_URL} + ${env:SPLUNK_TOKEN} + ${env:SPLUNK_INDEX} + ${env:SPLUNK_SOURCE:-besu} + ${env:SPLUNK_SOURCETYPE:-besu} + ${env:SPLUNK_BATCH_SIZE_BYTES:-65536} + ${env:SPLUNK_BATCH_SIZE_COUNT:-1000} + ${env:SPLUNK_BATCH_INTERVAL:-500} + ${env:SPLUNK_SKIPTLSVERIFY:-false} + + + + + + + + + + + + + + + + + + + + diff --git a/splunk/otel-collector-config.yml b/splunk/otel-collector-config.yml new file mode 100644 index 0000000..5887e29 --- /dev/null +++ b/splunk/otel-collector-config.yml @@ -0,0 +1,157 @@ +receivers: + otlp: + protocols: + grpc: + http: + splunk_hec: + hostmetrics: + collection_interval: 10s + scrapers: + cpu: + disk: + filesystem: + memory: + network: + # System load average metrics https://en.wikipedia.org/wiki/Load_(computing) + load: + # Paging/Swap space utilization and I/O metrics + paging: + # Aggregated system process count metrics + processes: + # System processes metrics, disabled by default + # process: + prometheus: + config: + scrape_configs: + - job_name: 'cadvisor' + scrape_interval: 5s + static_configs: + - targets: [ 'cadvisor:8080' ] + filelog: + include: [ /var/log/*.log, /var/log/syslog ] + filelog/quorum: + include: [ /var/log-quorum/*.log ] + operators: + - type: regex_parser + regex: '^(?P\w+)\s\[(?P.*)\]\s(?P.*)' + timestamp: + parse_from: timestamp_field + layout_type: gotime + layout: '01-02|15:04:05.000' + filelog/tessera: + include: [ /var/log-tessera/*.log ] + + +exporters: + splunk_hec/logs: + # Splunk HTTP Event Collector token. + token: '${SPLUNK_HEC_TOKEN}' + # URL to a Splunk instance to send data to. + endpoint: 'https://splunk:8088/services/collector' + # Optional Splunk source: https://docs.splunk.com/Splexicon:Source + source: 'logs' + # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype + sourcetype: 'logs' + # Splunk index, optional name of the Splunk index targeted. + index: 'logs' + # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100. + max_connections: 20 + # Whether to disable gzip compression over HTTP. Defaults to false. + disable_compression: false + # HTTP timeout when sending data. Defaults to 10s. + timeout: 10s + # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false. + # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true. + insecure_skip_verify: true + splunk_hec/traces: + # Splunk HTTP Event Collector token. + token: '${SPLUNK_HEC_TOKEN}' + # URL to a Splunk instance to send data to. + endpoint: 'https://splunk:8088/services/collector' + # Optional Splunk source: https://docs.splunk.com/Splexicon:Source + source: 'besu:traces' + # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype + sourcetype: 'otlp' + # Splunk index, optional name of the Splunk index targeted. + index: 'traces' + # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100. + max_connections: 20 + # Whether to disable gzip compression over HTTP. Defaults to false. + disable_compression: false + # HTTP timeout when sending data. Defaults to 10s. + timeout: 10s + # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false. + # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true. + insecure_skip_verify: true + splunk_hec/metrics: + # Splunk HTTP Event Collector token. + token: '${SPLUNK_HEC_TOKEN}' + # URL to a Splunk instance to send data to. + endpoint: 'https://splunk:8088/services/collector' + # Optional Splunk source: https://docs.splunk.com/Splexicon:Source + source: 'besu:metrics' + # Optional Splunk source type: https://docs.splunk.com/Splexicon:Sourcetype + sourcetype: 'prometheus' + # Splunk index, optional name of the Splunk index targeted. + index: 'metrics' + # Maximum HTTP connections to use simultaneously when sending data. Defaults to 100. + max_connections: 20 + # Whether to disable gzip compression over HTTP. Defaults to false. + disable_compression: false + # HTTP timeout when sending data. Defaults to 10s. + timeout: 10s + # Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS. Defaults to false. + # For this demo, we use a self-signed certificate on the Splunk docker instance, so this flag is set to true. + insecure_skip_verify: true + +processors: + batch: + attributes/quorum_log_file: + actions: + - key: "file_name" + pattern: ^geth-(?P.*)-(?P.*)\.log + action: extract + - key: host.name + from_attribute: tmp_host + action: insert + - key: tmp_host + action: delete + attributes/tessera_log_file: + actions: + - key: "file_name" + pattern: ^tessera-(?P.*)\.log + action: extract + - key: host.name + from_attribute: tmp_host + action: insert + - key: tmp_host + action: delete + +extensions: + health_check: + pprof: + zpages: + +service: + extensions: [pprof, zpages, health_check] + pipelines: + logs: + receivers: [ splunk_hec, filelog, filelog/tessera ] + exporters: [ splunk_hec/logs ] + processors: [ batch ] + logs/tessera: + receivers: [ filelog/tessera ] + exporters: [ splunk_hec/logs ] + processors: [ batch, attributes/tessera_log_file ] + logs/quorum: + receivers: [ filelog/quorum ] + exporters: [ splunk_hec/logs ] + processors: [ batch, attributes/quorum_log_file ] + traces: + receivers: [otlp] + exporters: [splunk_hec/traces] + processors: [batch] + metrics: + receivers: [otlp, hostmetrics, prometheus] + exporters: [splunk_hec/metrics] + processors: [batch] diff --git a/splunk/splunk.yml b/splunk/splunk.yml new file mode 100644 index 0000000..6b4c337 --- /dev/null +++ b/splunk/splunk.yml @@ -0,0 +1,30 @@ +splunk: + conf: + indexes: + directory: /opt/splunk/etc/apps/search/local + content: + ledger: + coldPath: $SPLUNK_DB/ledger/colddb + datatype: event + homePath: $SPLUNK_DB/ledger/db + maxTotalDataSizeMB: 4096 + thawedPath: $SPLUNK_DB/ledger/thaweddb + logs: + coldPath: $SPLUNK_DB/logs/colddb + datatype: event + homePath: $SPLUNK_DB/logs/db + maxTotalDataSizeMB: 4096 + thawedPath: $SPLUNK_DB/logs/thaweddb + metrics: + coldPath: $SPLUNK_DB/metrics/colddb + datatype: metric + homePath: $SPLUNK_DB/metrics/db + maxTotalDataSizeMB: 1024 + thawedPath: $SPLUNK_DB/metrics/thaweddb + traces: + coldPath: $SPLUNK_DB/traces/colddb + datatype: event + homePath: $SPLUNK_DB/traces/db + maxTotalDataSizeMB: 1024 + thawedPath: $SPLUNK_DB/traces/thaweddb + diff --git a/static/blockchain-network.png b/static/blockchain-network.png new file mode 100644 index 0000000000000000000000000000000000000000..7751172cdeab1292295bb4a50f266b563ba10d41 GIT binary patch literal 133648 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ΝXs`k(_*NsDo%=sq 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
  • ;a|~ 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≪$X@7bM{;NL@5p_ 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 >sCc}`0%9&>RF3H5`<+|&8 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
    p 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 z≷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
  • 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�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 G5}E+QT&$r0 literal 0 HcmV?d00001 diff --git a/static/qs-dapp.png b/static/qs-dapp.png new file mode 100644 index 0000000000000000000000000000000000000000..eb2e57610c7671271c4e2738459eb6abc79bf285 GIT binary patch literal 72887 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 bT;T=l;YK%o3I6#9_@yALB2zAH{PuqVpgB== literal 0 HcmV?d00001 diff --git a/stop.sh b/stop.sh new file mode 100755 index 0000000..545499e --- /dev/null +++ b/stop.sh @@ -0,0 +1,32 @@ +#!/bin/bash -u + +# Copyright 2018 ConsenSys AG. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on +# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. + +NO_LOCK_REQUIRED=false + +. ./.env +. ./.common.sh + +echo "${bold}*************************************" +echo "Quorum Dev Quickstart " +echo "*************************************${normal}" +echo "Stopping network" +echo "----------------------------------" + + +docker compose stop + +if [ -f "docker-compose-deps.yml" ]; then + echo "Stopping dependencies..." + docker compose -f docker-compose-deps.yml stop +fi + diff --git a/test-docker-dns.sh b/test-docker-dns.sh new file mode 100755 index 0000000..14ee305 --- /dev/null +++ b/test-docker-dns.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Test Docker DNS connectivity +echo "Testing Docker DNS connectivity..." +echo "" + +# Test 1: Try to resolve registry +echo "Test 1: DNS resolution from Docker container" +docker run --rm --dns 8.8.8.8 alpine nslookup registry-1.docker.io 2>&1 | head -5 || echo "Failed" + +# Test 2: Try to pull with explicit DNS +echo "" +echo "Test 2: Pulling image with explicit DNS" +docker run --rm --dns 8.8.8.8 --dns 8.8.4.4 alpine echo "DNS test container started" 2>&1 || echo "Failed" + +echo "" +echo "If both tests fail, Docker Desktop DNS needs to be configured." diff --git a/test-rpc-connection.sh b/test-rpc-connection.sh new file mode 100755 index 0000000..49e707f --- /dev/null +++ b/test-rpc-connection.sh @@ -0,0 +1,51 @@ +#!/bin/bash + +# Test RPC connection from WSL2 and provide connection info for MetaMask + +echo "==========================================" +echo "Quorum RPC Connection Test" +echo "==========================================" +echo "" + +# Get WSL2 IP address +WSL_IP=$(hostname -I | awk '{print $1}') +echo "WSL2 IP Address: $WSL_IP" +echo "" + +# Test RPC endpoint +echo "Testing RPC endpoint (localhost:8545)..." +RPC_RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + http://localhost:8545 2>&1) + +if echo "$RPC_RESPONSE" | grep -q "result"; then + echo "✓ RPC endpoint is working!" + echo "Response: $RPC_RESPONSE" +else + echo "✗ RPC endpoint test failed" + echo "Response: $RPC_RESPONSE" +fi + +echo "" +echo "==========================================" +echo "MetaMask Configuration" +echo "==========================================" +echo "" +echo "Use these settings in MetaMask:" +echo "" +echo "Network Name: Quorum Test Network" +echo "RPC URL: http://localhost:8545" +echo "Chain ID: 1337" +echo "Currency Symbol: ETH" +echo "Block Explorer: http://localhost:25000/explorer/nodes" +echo "" +echo "Alternative (if localhost doesn't work):" +echo "RPC URL: http://$WSL_IP:8545" +echo "" +echo "==========================================" +echo "Port Status" +echo "==========================================" +docker compose ps --format "table {{.Service}}\t{{.Ports}}" 2>&1 | grep -E "rpcnode|ethsigner|explorer" +echo "" +echo "==========================================" +
  • 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�KP$d+f6A{NIccA> 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 LsxoC#rceJD`YCH& literal 0 HcmV?d00001 diff --git a/static/metamask-faucet-transfer.png b/static/metamask-faucet-transfer.png new file mode 100644 index 0000000000000000000000000000000000000000..93b51944effc7bc6592a3adc7a50dca773008fb2 GIT binary patch literal 49079 zcmd42Wl&sE(=Iy1NPyrHAV4y>I|Q8s26uM|?(RAef2LN6z0{}0z-@brf zDHaCd!~eXq5mmDX08l%he-NT+Q3(NnPXICSH$@ligGE;t1;csJ$-RN~IK^(l5pvZi zE>a%-C)`_V`hFnQN*Pre6KY7tkKlfuHQFzEp}@e3FN{=FA(?3%1+q4(ulh5JEYl5l zm#X|IOec&$tsv>doLt(s??;cf_qw8?+gxJmpHy0!Q@6Q7(<_4Ey?H*M;%$uoIRjMj zWGVdT)CTl_`V6D>zh2^8FL=APd^TuYZPYwxOSL?R(-D>NHu`slptx{ z>bZkDFaJH_-6)&#w`HwPx1*lMH-3}EoJ^8h95uEjx(HPT>9z-ou#5e#-AYL=XQlOV zbIWN`MB@Ve*QAd$62E@uXa9H=1|~NQq#F4?GBM|1)blH3D&TDJbu@?7i3VDJF1een zKJ@K>f5%Y`U*lF+@}_31g9T?-D7ds{aGtNQnhqpazuOcM7$v{u>(jE{IB@Gbk1Uj&N#*Wn$v>yvHpU?w;0)xOitE=hCZuwE-=_glK!aVxh z>?MYGvT+W#vLLGjhJkVR%=Hy=bLo6~i|qn2#3k~Kq7^bhMMjDojoFjWdu3mR+tA0< ziZ>5EaauPMgLaAoCaw9iEKYU~cc!xx3g;Y-VvmJz@YW*(0tK*CBSJA?^^Y+{?7s>s z%tatKe1$eE5+s40#oJ!bo%R0Jw`#M2gB=?aTUlJn_VcQnDeLqa4f!4BTdT(=wdQzF zTanveNd%1V&UM8twDN zrPjL2q`+=R6%VG-9{NfTYbkDaC48^D?Smw&d#vOAC7!^DYZpm^r!VW9Bf$otD{s7H z+SH{CSk)LG%(z+^@5eX!jDrWKy5n_@6%c=(1w2m}0AS29c~#shWypvU7_Ycitn6AC zr56MS;x7OC@~YVGi)zS}S+yz+iof~HC2ojcU?)&6x7Vh+KLm6)vf7ZNjcL^Lvt=u2w|r{r4MHl$kCuz0aPb{k~v#bf_B7WlY?fT{YhRYrjO5zcUtebk)ed zd!hb!6Gwq$+v?u*hk{_iBN?uoWW^V!w7LO+@Y*+ExW6%5+x%eYkOd>J@$kGc|5M12 zqGKKR*}BMQ7GIcxkp8=1q;>1R6;oxFLNYaG8MOH3^a!_I=WO9Be*}{vL zGy(>{MMgzA*$%H$Bl$Q^&uw8NtdQJyx8vN%pjL9ygMl%24T9WvPSJT)50}L8KUsGW z!+Tv=jk1_mTvcX&N4+eqeBQHYR7;VZ^K@~U0-<+Uigu%V(`l{;R`>rLNt3lm9NUS4 z?oWw60VatqrmHr1G~;evkaG$Oq*1**Dpb^#U->wC3){$DR{I<&x<7*OEc~65k`0`w z7%kF_lhKt=L-Yf@Hayrk=I0^efuifjc=*KaAdmGVEZf?!DY5_wM+)=7`BM5HX0SSL z#v~aXCmX`nJ>ZA}{X#;zyem;ZE2vyd0<42_YQ8NMX(h$I$YyOf+$Z?n+(N)(CV=-` z=mi1>^Tx@T3-ih()`}q06XJ#6Q5~;qfNG`sdQ%m8#lzrb#jB>KFU{6*5RZlKn54stNpk5*00AImboQhjpc+4oi zCT@7AXNnGCN1aTAQ%&ulIZ{n8O>3q~G(WL=lY}}e^MSFbKqQ?0$`%5z>hu$uMMzIB z_s4^qqqBhatT(KU4|OS^9j6BNUA8Q98Lyzg!2W8XL{>{Rb~8kYsZDhT(}s$`M^*p) zPg7eSsg=efocMy#UIc#Q?&9rz4M&@k_>)LPA1D4x%C> zBV((YGwmCmS@HNCqf`0EUUeXRL`+78k&f=o|q8A2&J`nVEs4PS}JPV z+POpiB{P!aX^!IZ-SY~D4eY4hFr&zRoc^@9*_}MVYsiNxQXT6{b|oRdr8IhaG$fQ2 z5-VRc)V)9x3r?Xrd6Nn*{{EYIPzJsR>AE(^@wbkpK_@762E@htjTC=Ds(iQU)YrEG zM{pruZPsniJS1($MK969W18E2)hYieo=W-}ePKORi%;n~~pcuzuqx1A@K8EA68MFKm8-D{SgnmgHf znNw3!)2ev(fix*uN!P=;tPQ5Rw194#(JIC*4;2Hy)uGqD_u5-cr`<91iF|x~oE#56 z&xY&WXi~ii#wLKC(Mc(c^))w!Yf_opypIT-=y@s(ZGy;(KT$=S6U{4$+I;t0k}aZd ztarH6Xo(LrB6GtS(|F?R070A96PTJ+=b?^|W7gQ6Gn4okg!TK9GAtnSUe zz%1foNt!xk`HbeJ?@ra}-7z|Oj>T*~h8=6f->pv?+8dpZx2$Y#%M7*j_1!tK@p`N= z;riwYx5JsKB;b_p%cf57D%wS*9~mPRsUu9}w6=1|G93=EEO{vje&eenW|OueB6hFcw4#=_EbCWqZ{L9P32miGB48Ow;6 zn5*F?*LZwc=pA@YvQY=#ERS;aqt7`ZR;*yQ0V>k zlV$Yzy7Ng~I0&Cu)A`s*KEJ6TbP5NDTc#fINj0R#SOrVYt}ZIDWY6jg)G90(ayQQ9 zRZShspdB0(CXE_v#cj=__+5Hb^oG>RS7Ug01YGc#Lm@eDE< zN#T3Icz=1c*jQ0vcYU-7?Oj<>F7fVszrRpxz0419ah)=+%`Efn8$U)@&kQ3u5xd#N zV62X`l$0e?35GG-qsbUZ&+s=67>9OG!RMGNy^9pu5}_%&md zvV!*>CvVcrq4`s>SC0w$b}5c3qs9k|Rkv?TkIi_SjOI!*R#p{^We#+?PNyn{>cIwM zyBBLaJ;uWceD2c+bBymxtv~Etl`h4YJ1$M(?RI&g@!yXhsKFPJ1U~Xp8LjQjH!l5~ zU<0 zE120{+Bf**SWa1N49bH$N6jkx;d#s9yfGOpxx2AUcc&)-aB+^v5khi!s@DY-n zpT9qboSU1Q(c+qRw)|~BZE4F{f8qOX_NwnN4`VjV>aJ%R1~}}qsK$r@k3(zdYMPcu zbV{4)FW#N2pyQW5+&wmwwk&!zObTZO9${%L)aDJ}@)gb{izUiAc?|uCACXG9X&*Rm zRaesBfsloDOPGc+u@<1X+4x}yrP44Tgu()p>A8-%Xny&g=XRQXg~2R?`}n8eMzR! z(+rqV0nIQ|3ST89mXyTj`SPQ`6jv><;L=TA2n1zhW~P4r|3!&}_D z5Jr;rsMC?x(}RCJY!(Q93TK{%aW3@^46KuUVj&27x^F!;GBi9zV?dvZ__ddkw+Jnu)Ngw5HM7PD`Z>upX)I}0yW4>!>|Ah~ zW#mOonip2^!r!%*6|#r*juB;l`nZKEf7JCSjYP;SA=J$EVrL9|ajBwXzfZqTNDtiX z8|;^~4g{@r+iFm~Ct#yucl>>Bg2eCRPuO3lSil{S;*Xbbc@Anln zptzLOdsNi?q9TvAAl(7}`=UN(ULD9IPVF3K#xvt;BkDD)L61-z*9@i^=yR^AKj=c_ zELkdBU3hx1tuD&A+4GYp#fXso>`2@i2@%}Qv)NxWL@aQZPI;XF>GHT_n0i1%N+WUa zp_ahlwN}KL+qpZ=uhXm}qEbtz;VI02lifP<5pE1tn_CvJ^{CCA%mA6hv$6)0;|7w7 zpioL>$emQp(@DI&5vr^~5zJ)B6d50_NZWOC{y5w3JhxlrSgZOd(4(!06A>}u!6%=j z^`dORs0%iRakiI)h0m?O8iXaZwsQ0KT||kfaWQ|n#j_m^$6Z4-jVLM%tks<Ya-ox~QJVh75L;RDALt?42bt28Q)6sa&T z2_I*mAk+&KT%k9jFY+V}8iu)Pq$G3A+&!0*0##kn6|@AvotW%5#Q5bUog*3_4j`5* z`UU%IWgf}v*CE;AO&3Ax6FD}=*mxu)A3wGif3d87Ck8%dRBbD)DpRo1uyJRxWepY- z6s*UafR4*bo0yo)%+4aKsez*+Bilhx^x71TFLhS}EY0rM{7wh6W0@j^#_HMf^=4BA zGs`ZI0?O0l*%H%5YJ9F|Q52j9j%!;ePb14uzf7KIxDBFR86C#ES3_*^7Q&vs-iDmm zvFPujBhXOA>p|i|2DE&!n@Ol8__pE!1ifLNvKOW z#OvvuXXk8R$Dar4KG1z9q5HM5IxsKSVfwr$J80k$?UKnT%zGZwu-HH|0t_$?thj%;QAYoDc7e?dd6x(*d-}^?aOMA~+Z+ zmO<-m;7EtVVs`e7K?)B1h}q2?2K1kO{L1hIm{IY=B;+FR-ZRMJj<)sjVW9ktIZplS z0?W(^r9bmJ8aahIW|4^Z)PaFy%rCpU(Ic4eJG-r&lZU4?ij`@D+$XmN zg*)}ia!RrqE;(;~U*33TB+ul*T+oq~ept2fMTet{^RE zRc0$y`Dp$2wIxdx7Ftk5Ed8~o1`m4Yx?JFW8}wzaJ#~x6rSg79>H7;(K8%QHIxyx_ zl=JjdjXzMBh^vB*RYW9Wh*yrZ1Yv4sruJ}bvYEl{e%q}8Sa9+1(%IX{Yu66Tf9HpDo&ma$QgB8+Gy7C0(mqGA-UpT#7Q^_? zr4wuHy6POuc%TIMd?~(Gcb#H}5f(_;skLu7XPheJe1yGNj}`kTQG;NQjjH-8yJr4) zlX$O(q}C?9^`LSjuX=wvlz@G&?XU0C`E{#1e9bj9l1}A_24xJN;m|gAcf!baz*&hBiLNP77gJOIDI_c7x=wyWPwp@U8#x58unB;rC*S4aMha zopWjWhQc`CN?X}*v;7+4ZZ%GrXqSK2n}NswMUR@d!d8obGgU=$sCd)zo1NX+Z23Aa z{oRgmCiM(E4wChkUw&>u&oM;GjJKtU78Hl5=FP8f>>aFuYbE3p^eYrz9GvShm(s7v zjeAuOBy&*&k!l1ENo3ttkp@`6a1ZqXu~2#X*Y`f%@`Nh#PE2ML4C)szCtLJ{XKW(O zoCsboibUdGHCVN$ee*SHd0?rfl;xqNqB1#)WGdEnWoO{`+8SV_jqX?GiIL)0R5mjD z_6>n^rj~021mfanfW;ek=jP^ea;j!4T0!efp>^e&UoEQ#{)2(UfVlC4xP?}HcUP>uMC$VK^#2QHHSaP%@E(~t559pMQ@N`ASU`H;R#n5MSP1a%s zN-?N6cxtWKyygx>tXXBL5Mh6nF0at+)55q#ru^uw6Vjd1h#8JV1Nej4h z1J*rnv}D3fo)J@<-RxN>6)i6>uUv9BuJ)1Jq1Ugd=ps`@BgGUNGc(984WCIzv*irs4L+Zr*NQ~KdF3c+c5Q>{Fm6S z>sBI*mbtwsPLP6;lxn@%d4-U&tIJvxC*^e%dRP)yw#5`$>hPn#A_kgd9LH#CASMaq zi{+Hhlt#w-a?!$^C??2u`sW_Ih6>}ngk39~mPpIUVdYZ}6ExaQO&f+3t)U~yhruZ!DQVDfvZivr2uy~tXz+0& zo(McSrSgq4TKb7_eh!E(ny}x7g%MG&;9TII;bi{@gvy^7)MvhyLCtdSs30U|;r-LF zSq#Y0|0t?@P4dI=6{><<*vamFQ-kXkS5c_urq~SOmIg4VKvXtn_wBKWB+uq0D5!B7 z+4_*GHpc-@^yqUZYF2QQ?No+r#fdId)z#mZdkMI?2zqHkkpV2v*2x#Vt zL5C+h_U$=#SvNt&%Ue)TP#8Luk|K3&4c2`mIrMP6CpYHDp?PQ)0%x6^M#w+X4u*Tn)j2c8##X|%ZZbnWRf6U#Uw-=sy;&ae#u(P5l* z6KOv_!VvKIM1Ey9(87hlXNd@pLnBq?#uw;W{jhr3Z6_pKB^sODrbu@4TM569#j$l= zSM;;Jb_>|p}M#hJ0=4hss)X`oz7sUm_yr+)2+ zuJm7PR;*yU{ZD$Tm`rp7vyw%c9g|U*5xvT$_VMcUG2(rLU2*}k-)r3+^@7N!|1zNp zf6_}{?`QZDI`gWQKAEFl@?y)t$Usq9nY;9It+Se;l7;pCn~u~zmp8sX?$u4ibk2(j z85sggj^=OP6I6M0^cVIWL%a6~ z{B@&-*xEFHr$zj93p#sWQ>iZTL-@>N(z~?eU>nWMH-=MK9b`6ak^#Tb@)viHe656b z0`-HSAx^8)`e49J!j;!v(?CVh6e(CowH=cg>?6l7UhkLRB1~tl;Eb_bzkga$r1C*Q z?Q3U3(^_!IVN8WbjOZ3gR@HW6jjqt&#Z4?&m#F%#8zGASU?_@N6f~hwA>@9CgZQ8` z83&JK`HQjLNVXyk;Yi}pU@y}Ll(3OCEieBGsCi3JPi{jc3k&Po`kJ7CV4{ZAJd_k0 ze&AxuX5#(J$XG?Fs48m8!vld1Az@o2=DiMll=~Nc2W$Ip{=|dr{8&EG)M#AKrV;)E z+ejo2)v0PJV14|6j*Hm|ntn6kthwN@^ra?IuS-_v&rtfU89oHO@bSq@t(~2|Ra}u2 zTMad)KTGc@C}-*TQa6|rGJ0rhKAtb={`X|_!;EXa6QTzFuc9$r^nttkc`z{&V_0h$ zaG@X=cfTH$WgvKiEJ9_DkKT}6>1=lI!NLc;wSI^`Yn~J?2(CbY{NdwWtp1lC8`YgV zxKc1?J#=yhtBQX2CV66l&WTqU*1r}4MwF=tG|Aeqy6C{))(`;a=KB4l^}Ebnl&&>0 zVqC}id~$q1)p$_!_I2owsf28nbZAJNUSqwmil*M#VfoqD`dG5Kzz=p8;ZZ%omsbgx zdUbr^s@dHdvI;96=s;jhCx+O2nrDLq5XFg7h5kZn{cTUq*(&?_`lR7>E`5a|TB#fQ z0|*S>#dfuahacOc+qoX2;OU30qrzDZ>2r^fK*L;MscPw2PqmS=>Y#ZpD(r})i4|yN z44wf!_y$plf2==kp#ml}mi`Fbx=^UmV9VB+;xSa4t~!Ja<<@c(MGDQ;=k#xpQ>C}L zXteiwLNsBiXduHqqr)8DNM7T9)#D6OhgIXkrph^k^D51?!y>YiaVnjMh|Xfk{eLN^ z9a(Yl0lV`MFi=iYGBypdgZ?-2Twg z?vHD7fbIv|ScI?wvT0)pU(({2Pd&5iYOJJ;Q-pzm#hLWQOd3Q=7~!gKAf5hKCs_ji zd)ESMf!vqmay*CV|N3lG`xfN{?c}<8&SIN!V~3XZHeeMMo_!qF=`Ei-K!CMCSQ0QJ z#QQzs)+E4;M|7YlV_c>vzFn@M%y_Megr1O`xj!jbOb&3&vo>r8ykqLB<;$dAELft( zi0I0@cR*Jw2nr;#v)v8=>+*F)1Ubbwuz{A1@{JCr_3^o)-}s)R)I&4fx8E{mj}HfW z3U=`EMPD5}&6lK9;ilS0Y3l{)1}dSXG9Jwh`UU?p5bheFrJC0_3=G%8=x;s*rCUy? zudnmjl=1M)X)oRYkZbeBsVVvCzOqsn9Yf@2{QD*9rQsg_&TjG6bK$?-Wh5Sp1p(ZnS-&(2`uV1=_T9 z+8@vF(5}43(i6ixe|q(K@k2z^E5{IZwHmso@#=PojkG#WHf1?ThL0|r^}2Sn6J2&`QI6A3}lzWtu(DK zA5lZ5jQ+p842H{KPsoyv`$DOId|;}h_8O9b4$ z2Slq7>5Esh|WA@D}byJl(8+<031+mI z9}yU>GOP#SITl)JWh-7|GT?IoL-6s<(UE3DsKY-R1hAR0A3obWazaC=4Cr$+A=9Oi zs}t{JR~#{;cSA1ZljTEM5@&G!Q{(|?;{%R-*YO%GTh+vw z5wTRui#0I`?Fn5HXJ~97`tLT)Te2y)-?fM8rP04u~@6?Cny;K8!*AN+M*0Cs-=mPT07 zo;CnlR=kC$8CuoL(E z9C4>-ll|kwQUEpf040uFrs_5neFClO%K@jgYqfuhHw0 zX1@l9;OFm3ov&q#*=#PZM?nD88GnX%kT0XgxW9sKAh-+Y5%bc!5qls~RFP1Y>j47* zxTboRS*{Jq`l}aB^$2ZRl2q83>N$YX)0LMW0Z?<*7{j*%Re%+St)?Yvz}J8uaC3C# z+cy5Pjr|3Ye+r>(aqyOS>khWXiv+MK72tmD?f#y>1Ah6}y%yop5Fjn{+w-+o{M`s` zeDAES0He15WCloGf-Ba)_6uO=6I{gqOsVbhfAQ=K9`5zIl2f96k`7{>X$|}G#%r(4 zk@Xn_K-#-!i?lJGAl7*7pA~8JyScx;b8dMWE4QCc9XsuTI^`UW+|o4j5<+f4m&Hee zO^5_j`-mto5PgKx<#$Nw@9pao63*)ok%wmPX1Cuu0U8|!>XnsQPvcE(LatgWxH5Cr zgO#TN@W6huVCQow8kDPQAq8?#KXexuC0Dt;pALMStFoSvfv_FkbbCt3Pd)st)oQ;% z(>W+LQ=Pbo^}BYl7Q*9mR%tap)kr*#%<=fbC8o^tNlZx59ee&y{??)OKnsgR3dzcS zNu>CBn1r;Z1ij;d>pX1|2wpmN^!DEfx4G+XhK5`d`ZV?`cS7+;nr?Sia7tU?$@Xzr z^=)ahDEnio>s5S?z-gJW`{dGi!gOn6ebqo2^+-+w>Q`<{=Y!M78I`@R^OUKW#9$2Y@e*)zVWH5pkYA`XcKQ|}U|7JPUVXaI3vEgshA%)eYnxjsLD_5X$Xrt&T`@(+%1-oYrBA65kx<$%D$zcMM1 zC?2+(DeDoS;F92=hTTEGO=+Jd8#xdt6$KRP+qrZC0_~Fcl=v+Sy;d@s0;9WFrQ`Ns zS5n8tgZs_3ccWwDlZ<9BK?`GxT!(P59GAoZ0Nb^-^N8WDh?P zr_0^donQXEuYGrGB!yHwi+T4B!;n=DrPduK*xx4HngruqB zA!E)J2wjw%<|Xw*6eW=Cyt>fjqc?E;5g2$T9sPbmOHi(0O6Il+XJxjc)WV4(Ry`>2 zY*-6YD*Et{$sdA6zV)#qYH*$9fTx^M5I z9MsA=ez?qBVgV-bZ7$e`OE1Vh&4$HaW~*EJ0%)g95)yV7Q2ubJ6k0M7)hmYJE*$FW z4}n=s?O9!jTxY2A8?W)gUCjci#BHuZ&WPqHf)yr-uTSrsvcv_!wsxkbe|65yha-9W zlq)wlk%jJyAcG1*U}j<({naS@?vNler5r0UYSy!NLx{F7fI=BV^Y%JZG3MG6p8Kho z0D!vR^D61gXUOk^ssh!*m$b45CaTo2A_g6J4}WVXu(^vLH`KwAR93{1 ziLO)W?TQAPgV#VcCck0NZT6!UE&bSW+){D=1z{UwnZ>g z7ng?+pCr_;ouWaKMlm|h1qEuhZDr&m3C2!w76vs617hQnV5fkTypTadr6@^k22x@ZRbWJNxC`KL}l3xfohOcuv%f2U%9-7*bFYcVEAX#7INz*#(+EU>duZ`mOZ8U706PBZG^%}O3stmy*x+dh7<);G zl)PCiI%-~ae>F;x;C+O4h-2zC&2Fzr`sY%+u$mU1{APL2-oc;uZ^f*+4bnPW_$PS8 zI+QYOs0*zJyi{8%$X+K8m6Rkt4iVpFm+f;lgmjWQM2dzf7c0hKA3Q|*FOQb;!xx9= zLfs?Hy|?d^`Ks5I9ytK^fzqnbO>a@ZxtNR z>+JCgBf{w7;d&a)Yk%=CslCp}=qwf;-WJbuG*@a+vg*8zr!f|=yOq!Fw)fIHOmW{B z4LKJ|q(iq8Kis%EmaD3YGw%UZ5>%@y?N1=H1 z9xt}oy~pUoMh=L(bPqc|EP40##KrOVa@*s4y>Mep-d`LOf_E|~vkVQeE4jz0i6TX6 ze0HjpMQuzVFyg?s9Jbo%Nb3{}F~|jw?2hvHfAHvi0jT@tvi=J0IAa^GA3P})R2X4; zk5`N}r3~b1UtI*A@O7Fw%pJ5oMP0_7uD5tQFF!imuhmY+QGEhZJHm1+|EP!LfWdo{ z**qKtM)VJ>#oH~>rfyk-s?`|-S$(Dtx(vfsE{+7&ju~vL&16{N5lI$`k>)=S0Kn&o1 z{H4iueb)0RPLF3;y{3-m~C`7l5xlvikb5St>AX18xN~YIg3M z00e+lKEN+6SJ)2n+d`RyF+XsX%V(Xpm^u{l~%f}J2vK|o!z zc!323JJGJccvS+q<--~exAZUx0$_BNnVp^efdJ5^<>v^O(?`?*S+XrOyYf}d%M{ui zl5W3KG`MRBi6A@=aJc$_b^I5!(r#6W1Q+4gwz?HGxM|dWU!(>&&^-+^9o6dzv%Lmz z&a*IBxJwVk44T0Z;PvS5pYi;Db+fa&zCI5lZJq~Z3nY%Ys9TZXNUPjy{Eras z|8P$-KU)PI&b^=*M`$t0;|aG)0B=+jxHsYcEuZ-kFC4*}2b`As7Ej|1z~5a#j9rMl+9gCCZ3|hQ+Z3r zZaAFb!bq67LZgL;4hNtY;TnNCN#cdJR(CxQG^vlVB6W5L{QV4TI4vFX*%W}V;*-B_NZ{W$K5=~?}@dBlmm6@)CJ1(0dLE>9@Wem>9 z{zuHto@56b$e$TQXnG*oo4H*^T+)ZbM0bVN#%8m9@ezb~64J+gB#yt`|FVbFC?#E; zFL3dBXlHr%Hks)!9lYpEvW?iz4HyooqMwiB@s^i z_Q8r}*gi)?e{{M~-14J+pn=aI1h`>-#hTWh9d{8ZEkyV8Z?rAC7@SAeARxBL%du0! zzN*Uo;!;a7?vk&iUrSp8p)TrMayIHh@bd0 z#8D^@y3Vs~TRG`^7pw}I^UnG`6&@H)To12!EUJm5*~8BzMkhnY{zF~q;N|18RQFp< zu0j;j757;eSv4IVU>nKBy&18&C9Ql`lb6zgfh^Icy;-H>g`p_jPKSFNC+3cx+82Cc}1#ScMb=|ft^#xoVL3vph1n@vlTk21EZ~{PboRP!ml$sXhVpp3Q zOi)!evJW4}xzim;s|PyiC`+!Na&o97%kOU9mx0;WMA`H*$RI-dC73kNl0)rL!j}7Dle_aj7^r&w?1ix9>9Nyvcy5VE~K?+%tOH zh}ml(fDf-YG%NSs6XxL5nbFifZEKPgI#ijysbrADUm#Z!am~iNx*0b1|Jq!GO^6z6gbS>I&_pfm9B@bN!a(cfg1n#xXr= zJUXq!`05X99D)UB^ACX{9Z^&}(F6^eDopNke)wRY^x%>d#f5Flu+R^{g0N2dHQ|JW zcX{&FW&^L50~;F6s_mzl+nRIWA`_JCsDBT4%msVADv%|9Pb0*K`J4N;i9<9;q?lxG$-{PmEImbh z;Af4;Nlh$_zE>34S(1^tmCAmPjJR@T#h(QIbK$db@J z&!#4PNF5cwmy3&q5v?@HFMt)`er-o2l68eGTdyRt0lnWeGwL(u9&tr;!^8-Bg#jC% zy;}ubQ*5g%6eO;NT)|Z@Wj+yr17C?L`dS0dos7D&#qPCL#Cal;0cjs`CE_TGRcPW(;2l34C zV&?4!idm}JBFPje9k@9wC;H-(rH4c36X~M+u?KQR7(z?jt*_BvyS>XVa)U&d8K-sL z?$G}ha=S`TIIh_1a8RDURN`U}EAb)S!P-t|VD?a1Etx)i4m`2IiVGX0);NK@;!}jSk8z%3^B&^Di%F;ksapeK#Rub)CRNO6?_E-E6T`k zGtN6Tn-?S@l?;twgvPH>llly5>_KDmIuk!*3cnG185Br&Ka!y2gBhQ{HDEbY>VH=p z4g|8`>?>>G{BjwkjodLax`kMzl#=zrTZR*gzi96H`L0i*xy-t&P0Q6@C?Uv4!1C{9 zJ)-4H;?qNoYdYzQI&W7Wm2EGDJg;_V@7%|W)A9P(Yq2^f0^EM68K1*>2$ENtc+Ee_e)_I?f`|ZsYMe+|0lahks9r$aJPeV|#s56Ge@b}aAi0|E zGbE${+=EgV(T~B=i3?LD9w1Hab8wsEOOUp^F0yrubtEL*C;d@9ar9p%i1V4Zrs4c) z__guF#Hfqh>~@X$9}cX1R@*#M{WIWOx%%7ie}4b%&es>%KO$)e|H0y}XpS&}-qIHU zhwpG~IqGvUDGHDrrA;UITX8;GIf)Sq~CTP_WumflFdlFMbpD{TW%0 z`oQDiUlCaf!_S5m)#3QMjc5s4>{%Qh`F}qc5gfiQ_)G_ zd!98{q%Z*7F=Mu8pT~$vIdM;(`9mzm{&{Nfr3;Jl@bd%ZL2zj7?YP-NIA_`8vxiNd87Lo(dZ`u+*S ztmF9TSz++QiuHeIZ}js%Xq#(VM%vBTX9l{owDf=p-$RTFw~wQ5a&mId|7i*3PMk`> zQw!YBv4eldHJsu6|K<$q6mHZ+iBsS1k!E>cYG_I+DZ}Id-Z8Gh)S}-ov|0jP`FWy2kOI#k9C9#_g5d1(wjrEE0wU;j{ev}2 z`kn(fd^V!L{ebuI4K58_kFytmJjbRe>DaL%ZPhaXfK%pkhO{_PkNCtGW*=W&9);aT z0~^a0nJ7D;mgR&X9drzwDEuZ0nZ23c6Iz6EPWja=VHarT1fMFxlbREl>!3ES`hZ*4}gGs=JLvSku=XcKp)4QOk&IJVkWkAAUNI?ONQarP|=i`5# z?DJVu1OIm|!2f&8|L=F5Uk^B^T79f9EqLFhu_x|!W*&fgUU&$v`eJ{q@FUDkDQkq9 z47QkWcKd*|wqt_=^Db6Kv~Ufh;q}+CPXogYsX8p|d5fJRJ(lyQm*&f^=I2Qv4`vHh z7uImm&m+R8PTLT5!ufpn=gU;X!+YhY#!SyDdcM@l&0RvI4>5lbpJt<%4XiAbuVfY) zikkXqV^a7}q3%z=;>wv$e+q2(0=)-T-yc4%>JeSL>XKto`kv=(0S75#IswQWrL^JZt-BhuT+U*ar-52i=MyoG-V05Q6 zv-7%fToRh;q(uoqIx4ZFuImeX@_>Cj+%$YvhYjaHn;uoJ5NS{aJ;BCTOp{*{Oq!!Y zAST0OXY%EHePd|!;upM4N4d_tZw@@?!!Oj~|H&vo)i>B~W zvcWl*+nN0<@7~^91>%nf5(e~7c2nu$jMI4n9Y?iOVdfcmp4-Kw*?dj*(gZ0UmqGC@ z^Nce@8ZmN0Eq@`YNxT%2qIVD1GfA4UmSow-akhQPZf=;n&c!?|$DP&kR<6pzPU2B=quq`Btj5|f9y7MtD@x7%a(n4o zCYWs)_J;LGeoh=FS;( zE_ac8om*7d#Lwv%T3RV=PDJ)6zz-Smc6|4RpPJ=*NcBUoUD|As`8z1i;-&8${1zWT`C9hZBLMSw%+EtuN$MA zx?DwCxcc2!? zPm)z{Z{>is{acmcdwV;tpQKw|+xGlD@;Z&0BrQ)}jayibo>#Grv}9eS3^Gn(+)Xty z@=hlUI*-yUf|FNb;-6a&W0%!Dbvx@B3Fo(VB%CXHAg^Psj^91%F2d}4G$Utu)6EvrL{z)bH2ORxQx+Q5$gjoj?t8;HTT5Y)|Idm*8346`|^;OPCVn` z)Z@yC@=`d5sk<75Q!1P64}BTOx-BJKEunrMC*ZH%j`>Kb($BDtMty1$>gN>G2;GttL z#YtxKnE_LXm+F{p`bgtioDdLZFw!)mty=H;>wb~*NnYIfVK>$^n&5im>3-*32I;Zq zgSHKHb&cdX`J((#yd?NbCc#0cKST$XPHp_H7Pg)-{dWjGVttYoXM3yY7B&{EQe@ol z=59^X^673thCTsD1X6!SZ8p}t&~o$lo|YXt*m?XRRgKL!v@)lJF)`&P%~^lAVWN}* z1mUKt=BGO-n=J=9<3rDOVYwsviD2MQl(5;}=o)<5d+ED`fubc9=cev@3?3bHEUb zj>2_2-+-_uonRut?d_Lkuk%b_R!p=fJFUfzztz^nS60Tq?-%>S!}DT@8N6=7=a-fh zi7kP9+|ya+Y5x~-ZyglZ)2)s2i$ekgcSr_zcT2+H?(Xgu+!6>dXo5Qg2<|>GNN{(z z!GgOx+&y{UbHDF9=iI7Wr*75lzousP^xoaQy4PCIde+*5k9W(XsiN%s3yWZmhs`RB z?Uim-cKf8qZhb0YnjEZKbU}MGzx_$FWGCE_)^=uZF7FV!goWBG|Mg{c@Pzf%fRx*S zc2~HcJNcW8TLsHv=}V``#}g*q28UJs$B~LXYRf!*S>L18yy1zk$jR}IB-J~oxfK~v z<#q9OJcy2;-^O74@52%f9AOP&Q=g4Y;3e z!^Fw;R7$-P8w`>Rav7U~cv;OGH@R*ic=w;^i7JE?4LWRh@p{+CwAGlAU38X7jMMNi z6u+#t!t4~KD6xDP0*E*2v_;s-60=Px`Y7G(BFme-CicgP8+R&hFNKK5X+75?t;Q+_sgzQ2fZxZeOHC^`oOMVbkOY;4neY`23UXeQ#6TH ze6n7DFf}sySe*69n1t_y&9DEcm;>~am9YP(P?jY03^>J$C*#|`wL$qE*5I{bij z$hsp|4zZwosc2O0L(5S#BE62SvH>EwA^F+oSEsk~WV`QnFy?4d^QXt&)7Y;E!KOl} z9!Al3t(>J}1FY%nQFpl9T(D5>WNSSOK#wt}@z;^$2atU?iLIgvw8Pr3HPnV@IbNdO z!d;ZCQ#te*`gd6G{T^Fk^cKg_qVwaM{o>(!B$xu5xK26_Zr@O_>BykzIjvF!2HRUM zpI@WUTXz=Dn4UgZ-p3DK^1nU=o(Yj0&T_Uf4bP<_bXTP1J9Rg8&!H)hbugN#T z-qk2!QEZq@U{sLYX+B({;oSak>b1T&W9YeNKqRMNh5k&u^W%*+CEEQX{2l{C^2t-r z7S}MNnM6^t%+|gy1j4=^lQ%0&IeOAWltQU@d1U9cJ{QNik2ez6CvIe0DBtHu#>_ z?)fV~d*e3FFMO@~!Mj*FrD}EFZ|``&C%RKif=cQ$#{&ng_x3jBf8dj5A5 zl#ztuvgvTbW#^h({-x=|_zET4&Cd8C-VDHm6&u^fjId4L5*KE$kaMs&@pYxn$nGtrHoFd-CE43lpG8@n$ksB&VZ++BVMNCuthPzVu-y>CdnoNC~^iX3@I zDH7ig;{v>k9U^m`w@64bLnW{Er1to(+z#E2wbd+5#CN`P)k6e^a^;6=fa*e7lq>pv za8mbf2Fi;5_-7<{1M%e)3w7oNMdA)D(H}4wZ2g$W<{LsF*u8bqk=|!+uQ7OsChNTF zgv~~SbLuRIsD*Om)nnb9iyUut_n+XRo`WODEI}-&K?}+ z-_WGC06i5Jez;I?`coO-a-ERDT^~a6^&b;fe&Tf2@28k~8yBCU-d+rp{n4Axxj66d z605>I8B4lDlPzYWSLPLhdsWf%`QUKBq1Ejg@2Rtnl&b#h@EB)#f;aCu728;tg`)yQU-r&h=kDL$GCHD z&&|r5sE=S{GI;orMwi-c()fzg1Tja(na{0+v2KI<=R0E^OyD@4@VyIZYhSm0!uqk# z06D~bc!y8JZ}pqB1;6WAgxYNAb>&a~EOn?np3mwY$ZgzLdAww_$Sw!aqRZypee=(p zH0gzS@Z7s?!(PCJPUakR1jcsouNy&t#TSHdew%rFS2;s=MPA}=Q2X8D6<$z3*j_f~ zp$j}p2DgiVv9UR=6~EY=lQ@Bt;H=c~pAsS((b=~mMdwv(&GkIpWY@1dI*vZnjem?b z-Iiuw?2661Wb#{NAnU<1#`Wo)60ZF$>ZRN_4qMZ|+1j5fwL{U%sQ;XFoxR?$=+LOc$)rr^=JQ5z%608bs+IksbRHe_pnRwG7p4@x4R!53%?kX z-*DR({y9_%(Du8(e|`n7)?oM3yv?J1^vJR;u0m@NJgzyEgwrgrA6~aK;yG^aTHC#k zrlb~kohG|#_1)Fz=DjGW;q-2_e1znUJQJnd?@M(oK9S$q6Qq5d#7(I%y4^Q+?e66g z@|Dj5o>Tr%(qp>mp~6cI{W7R`%AAVn=5EbgsQwH!9t_xZ5iC>PY#p1Y1U$3r4Ud`+ zFE0zb<8MEsWA<(e#u2OB-gx!D78Z2uE(T)~Ges}OX?Tlww+OXt9{7Kk4+?sLDSMaw zJ#;9%d`FK@XD#d6`oQN}tsm>LR$JFSRgJ;VGQ>i__9zsFy(rTW@Dy)FBe;9OgGn%} z{-o(@6TO*;xYMjoR@g1rGnk(D;2pk6_u=*C>*_e?nCi z_Zv2WwK?_P3y|g>ejg3L2t-5+3;gzDd!jCyDNoImu~|9G)a;$$b7cLqo&WxUTa7{aYu@qiH^9 zh{le!afoFZAek=fAI0WqOH;kyM zELGTSLxL9ou8|DyK-YzABer4r(}q#j0mmxzzJ$MdVvhHKx$+IK&n{8qgf zDtI6(xIglFjby-fG>?h&1+t~het(doJ0#jt1pJq>JdLC5>w2$$i7{r%ekM$!DG~%y(H8f01u(q!gceEr2w3( zaN~1!j%a~_fg$S2)o@=v;6g9)N8a>QQb&5E-&ZDYM4djTEHG=HN4z+j+jsT*+l0wh zccA{^6+RBs8ll0 z+r9WAed;bCmp5)yK@%qhEW{UNLxjME=T%j)16O4#01*KlrXWLXlt2}_{k=WxI)Ele zgOC*#()3NrSQd)#$ku_Gpw?MgOYyC`?vif9S!fghzLND;#D1b)=Z5qVTpY%F#SK@U5`JK-LAJF81? zrt)2ew@Dkk>@`<~T=Uj>uvdua}K&C4gJL+L)SFkuIeU(Q%+0@W*-9Z3uru%l7DTG0dF%@4iO zUIH>#{=aH=xhT4w{#3#s#kU#5bB9%74!46x9U{T)qmz?3goJc)Qk}L5Z;26YXT z)yu)b!NMZn9YDK~pvVZo{w+pYF?T9;mf*1c?3yy?)^~di{9#NCZuwh@$P0{C-y8Qe ze%J+e%c|$aq&QwB7#p|cr1vVW!_Q~T!Qk>hw@hPua>2whF_y+`uog8$2sr{dgR_xE zP_sl$ShxiOdF9wnA(5k0pkh^{RRYkN+@VlJ_21mT1$IFzVV(hTA(}BwOujU-o^nmf zmEAwNQI12Vo(6W_9HBA`5Do_ohUwQ^+6EX-7bvS~;rpJIY`SU3xbV`G*C$oXiBI{A zUP-OtnbYvHQi;h$s0|m-v=;dI0BHxLUm-Yk3o|xcMC~k2^*Rg7*)W*)+iyR9eBI6! zdyS5MIh28oi%Vq(d$txiuz#MNE??BxqOjS!q{mwEqCcXIbZC^nF@E&R^rbKD4i$l8j zQdvFx1778p!#9Ct8gC`R&Uiykv5m?nFG?l{jEZG%-=J;#U*Utapsu<)#+H^*6BS&n zsXCi2BiuaI4b+^5;FBb$lhi^#app;ij^VW{=8OHpO-`aIYB{b5-GpK_>kl7(Ujccd zaF5Nj$jC^tM4!VeavK(IH`ZS#FFlM zIY1X?sdm?>F?^jJ5mD-aUXn+|oyJFu2FMAr7e6Cz|7?}{QFR0CLHNIKLAeF5z#DN}`nfx#8u?+RBj4*Scm z&b8O3zuQoOK(6T*qdNQ9t85q*Q3)0+xTVAQgCn(V(a!WQ%#fN{UEJKWEm zyOG<~oCH13{hDd9>Ih6yQXnEpijNP`^al2=9p=L-U^M++FQ2tpTM*~_1JtCnwY7y$ z%gV|gwmd%cT(Exo_6-m=$8$^pe{@H3;OQ2S5O^|@`p~{BVD8CZ9VH$d90a^Xzfto& zFVbIhTk=`!)&e$0-8`(J!5`2LwxGu5ce;mF0{m4b<~Pgv@M90L+}V_s0w5TSG);|A zf>5Wlv@|TZofKF+l6d>z;G%>lZHOE0zP6p0alsgwt3boY&rdCvC-X_|W00qNk}_Q| zUKe>}4H(=Z!!(T;f$CpQr+R)_+3>m(Ej5ZiZdj)Q3#14P-;SEF%242ya&S0O*Z098 zB|X^Oq_#WlbgJrJ8p(keGbR2dEd%i~hw-sJQlu!9-6@oU8vvY8e&cbmc7X$|TzXNP9R7N>7Pl_ZN zDngt$z-8l@H^7Q6qsS)8`A~}h+m>1`mB;7iv$nQ2V4zr7SbX?^Bx~eJ;pg`lGG1U{ zZOc~K+>~Ank}8S5MjZLee18pD_58Xzbx;(fNT@O9{p|il47Gf^kk6d<-r?cl7NY&= zHGwPeJ)BAW^Uptkp|e^D$*W&ApBGo**$<234I!5T`f|`cb%rgj0;FHmoF#EU7wYRT znV3ZdN?O_4Mudi9s)s=BrxZP14-<4i>@iqf0nyghg!0wE9UnB?Ey4jp$@?8l3_OX%K`3v6(n?j zrX0}vE;KjW#l=Op(OnT+6EX2r-w;GxbqP?^*~LX@QNRK0uo+$GY8ke4&(zMcTKf^` zs<*e-d^r7n$gP>&j)-IB$`I%Otw~uYbvi7(4Ibh+Np}TyX(L1{`|!Yz_2L2fkYshpwk}- zpq#6W%)m=B?{c%j*;Sg5d%8GqMj=5742pqu z)_Gr`!ng8EoL;Ti!rFRwYs>wx>2hNr>2yL_{#f8~JVWRl*btbCfY{6X-6$V>i2doq>1v_q>rrkG&>~VZY{l8l$RNyZUupN0)E8Bm}}mn;{TrsPY|CRr*h&EU5w_MHTQ@M3`u3dX|=!)}17ClpIsOoA$@o)YK#m zZe;eQxxuezjKAL&v%N^)q{Ng|Q1}7;_)QV6uTiTBls=E&SjSN-bhA?lnZ6EYSI0|8 z!rP3)5z{O@Jwc(LFrBqB*3?TfRn_wdHq?#$4=zCKUe)AtkHGc9w3JCk)#shLo%NI+ zR(kr0Df(P68|$o++;WMsiT!+;cOtzPSw^aodQwtwcb zaauzv>FNp^B)YMM#MW+~L^Pw)2kD9@*ibv?!@{grQPf_?z;#!r`gTgXq6b!21jF9k zGX#}LQQF@WkH+Jm=E`Swx&a<85~!_553z5tQA7b-8p_wVGg+kR`cpn;4Z5(fPd?wh z{Fx6Yw0~P#xuZl*L2JP5E2PJ=aA+wyDn2>BfWG)NKB$H})}~)dTDHHZkCB@%1Omug zaa&98lpPqBP%|l68K|qjaV2kTJuo%T=SCJ)J#{JsABy$M7^KJI?a~Qz% zfKvTE+)_|bQ7J*NMJ79ZS}rawDk`(PeBkHt`xwBa;w5R)qoF60v3bpy`o%= zcuG9>NARzq8O3CnR%azjgxFwhiqCj~46LM@g@0{=0C4Q|G=*7#EG}WHYpw3PWB=4DGz0dteb_XfWfu6*|G&{4hwtLZ6SHOR<B-TRhbF_!hIs{TV&5+uLLGX1H9 zPNV`U(5h-&m6Ei8o#0=xC_b#0?iFb1E>wy>ub56Dk_b}14b;=G4 z^6WG-bf?OZ7LM#AzAu-nL_0)U$T|DWsdi$juADBe?RKMg5AaNu=RPd~z@Lt6W@aW} z0Rk{U_540cpwXRprf2=4UCJO;lms?PC-71dG}q zw|${=}Gp7N?%AlJF9k{(_8|t^X>7 zsM^ljF~KW1vn34TcK$G=1(}!^g}r{R+o`tn@(Z2XuG2uLDKCMjKvAP0EkCuYD7bc` zuhFPU)BtD4MAxn%6e3|!GDKfobM&`ETa_v>c%z}Mv8kl-cLB%teBGNNNs8)u8ajI_stY8?dDI^vGl$rsYivCKrBpIMI4L>)a$`I*sNIJ^CzP`lW zjtjp9_<`?`68ts)o#^=g3PJB`X9<7zYLyO2Cb@gf5MS(n13ihmj{zh2$?sps0^co* z{z0O8ig2d7urM)KU17FdM4k%&FeP-a0j>d40zCxMM`6u?rLA`I~(*FYc;0E0mRT<0&;{ssBjvu88_68q`B9pc%co-CDkhz|hr@)y-d zeEOdt$p4RFg8ylU|AM4-wB+UG&CRKYPf5Rv1H&c%Zz1VQz%OCIm3D9_S1K^kR9kq1 zM2_tL`?RssNRciMQ3MjJjTvy<5{rk1hL)EN{to_2MLEOnJ--~#`NIk@=2w?#ZRLQs z)w*`w@UNJ~678EUz+v3pz8{z|Ak0=@LV7>z!hly@0cS)qke3h20-nWw$wpy1bz1kmsSP$uDC-Ym?M}d!J;J(z59 z6uGD!L}zs1jBi#d&QRel-kjj4JdeE^$sOFq{I!W5A5Y374t~wmc+?j3{EZ|QSJP3Y z-8us(dMH#{O6rYy$KQp6W&$%wd3}3pzwl#4+&9iI9}}2Esw0yH#pX}N*oK-Q=IRiO6XH3uHZ*1+f*)Ao}=|5kJVAW92dmdG`6ao6@pSwaG# zM4ol_bud$cH5hRw{;me#0W1T2v;MX3bHtIC4=Mp)P{wDsJ=;B!+e!~A(udBNG$u$A+M3L%Nbzn$KrnX zb3}*Jq)@*}sUX9*i(%ZwY6uRw{_qVG91haYO}Q zIr*VNm($v_ecUy(UDj04So~?pruJ1a8{K=`)A&iNBzF=JsB+R~9(pS67>D_pQqpCX zKc&+J1Zog0s-}r6nXPrqqb{oE;WUDF0(OzHqSsDj8c}v|81Q@!L+8V>mZ2hpLi*Db3bf${~(dl<$VIXt)Xeu(ImbDjPgA;2IkzmCB z>5X_+jyeX{hZx%~~%HvXA)_Mw7ZquK~=Z8n9e#XI2%nG$1EX|)xQTIyd z{w>BV7fuwXi{prL_&UXd8G~8tB|-xN4}OWK6ZAI8W)YpVnE!KrUfxT$j5dxoqTL84 zk55ji@<1^kE+Jmp1=C_~JvEf%x{FzJZiXX#*97diJytg4l#EHr;WIABkd)86t3A-X zU!O0(o;q{eNZ{|}lT0_p?Wzr&<6rK<&8sn^cJCZT))aTo7n1s%N0EDrFoUx4m2ylV zb-Gh8k%86bCOS)NGlg1Isj4)W=oYq)n;LkoVAeIOy=TJ2=oC6B3KfSywt6w>2Z#!> zFcdXT!f<-q!*urgsP%Pt8}|ajbYbU9(`d}pXpIr$8!8sT{T-IhJ_+rZWcMDc*#Xi~ z)_!^`RS~;UJMg{zOEhMbk{~s7yqt7F9YWEgS8XHMDhytWuCD?A@;4`du*A5Gn%%D3 z`+9Azin{sjY6FKqK2TdPhP+xOVQSVaZ^No99S3+fmKJ^GxX%O9Z;JJU#Zm%2(r$=` zG&r4T4_6ne=X13Z4F0_2a~ZM&Nb^3RLrm_Cy31N{THLn<-ChE2$FpaMidrT-DN-nO zTB=Eb1fy%`!9#j+Fiz8DDrJySTi34nIb~>#UW^a>Z%S{VKdPACTSB1B*)kbGmJ`FL zcGjz&jmE?Rf}H>kK#AGQWBmll9hp(pL-hR9SZ&*xV-+n%QK(Xp_+Tgpa+ZelCz0)o zCTJ^8GxCzfj?dRGC`d=&zkWt}+UR^#2qO2p8!rKrGGA&1hkO6)L?#ZY*xD6!*`Y>uVr_xZsF_6tl_^zkx#pRrRPZ!1|o>L`NO~SB31~ z`rMyShip*`Ux!#A5J&*ZH2l)iBHYdb96W}Jf3>hs-P&DtA+ACL6TyJcn3ORt6OxSxNKtROfa6u>B3x@Nz3h#PO#NQ&WU z+}pMB8NIl{h|4b?Tb-b<$3oyyb_#!O>wuJ$%a6J6FFVKXfXVy(BVf>=zj^Zp1;t1c zmpiTPJon$owm#s8yHi35wY0Ufv$8r=zieBa^}t8tdSU*4{I0M?0NV2s8GL&T*jMAP zZ{$7>+-59|_f+W{7_`{jbuB(?BY_PBeEi+Z(L6ZzF zTsvCGj%LGG26B~<#t9LIIR+|tT-)>?*1GbOcfBr{&r3?-Yg2YbMVH1^yYtRD2y@P? zbngLp>*y6#>Gwl@Ao#Eo-o6%*D_OYguzijx3%n78PE$yoPlWFH;%8_IF#SlmQM()T z_(;Dej$gDSYL|}ZSu?#t|J51*uy2qOOA&s0es)m;q%8;2vHkobDMe;$z&Gn&ogC?Y zVG2k;_peN6g3Dh6s@h{GMBvV#yKu&J#;jG@y>@hAZ$NsQzQ?==9qs}#CWj7S0v-OQ zN{!$QjCc*X9}Fou8+x_Km(Vy4s*t4ay+xKLKl{o>r}~pl8iSaJpCJ&Wa5;x# zrZv!`80)Dn+uNBwj1@)(%uxSBEoRPi8eMD!ZJ|ev6pBECfn$o$W*vRB59E7-C)l zoxQY}mX_93ZM4Wf0FWdvgg2ffw=oh}S|&A+pmKqB`zzm4pqm z+?*WKb=4H6G+Z3VBCJ^4DpLdLbq`Gf%L2=!c`3rVkYuS!l(WVhE^79cAxZFrZ@!7P z8t`mtcH6(xy_0s&s_CfN3+v&_i<$LO2~pf{7i>A}E$6Ll5NQ5Gd^jKjGP;IonxC0O z=7^+fO>=T`O-^7(rLY7Na z$~gp!VLR2At_qnK{pt3@=*0Mvv+a*J%-%hMRcGIaJpEmojw*`y-(7{|v~CJjJ=Vnd z?N_CnO5+@l-$dytT51wHi+YSho>`UBEm(%m>owO^vZNKBxN%)o^9|z8+qg`ONT{fK zD$Y)ULFVm4cUDwB;_Gm>w7Kf4pM5d_-qLHKsj8r-mpH^3uRM6uD>Q$<65L>89sZsN$-7aqms) zDQlQ0*wGdgFGS@`;NeVr#3UK8CQi&!#+mYl4X&?0?PQ$^cM;P|d)tYLENj~7$>c0< zs@f~2DdH#^@FP(-zGywR2!*~juSbFmaJTDt{bBR1UCX^I!r3e({kt0`7U?xBehA*=6vaT8K9j!nA1Al?c}V*q z`81#>!6@-Jl53|x?)>byBsSY-e8$jL-;&#L8GDKOUf^Ue0B#~0$L0P+Euo(2{WGnZc(wEUtP2snxCW1 zxa@0rBr_#LtZX@WLS!PSiY#Ku|#hEv8HN|w*M z1KLGHAvvRv5MDI+lY3BZF)<$zOAyyv)+6}{wpoaeCTZ{@*Wdz47GcgY-t}-N?VMe75)fDs6pa+i8ASw5MGe-x zSf?xTpXr!%+_(|TaJPEfV`;%MC^t$2nIPboa#k1bhM20)-^U;3O2YzM49+d zOXWYQKNTE-PU%HWiSlYEK% zh%4QmK|-EH!>qcQA2Xa2)g09&h20f1>i6pnF>R?(e-*-#tcKPt6GB-<+F2A3CPM^{ z>Ew&o@)R@fb`I8{{{v~~5C((UO!3W6uid+a|IQ(TF}h6j>W5HqB@VZnSj}}_DJq4b z!YRTl*_rQ0wu)2aw%z>xbzV3 zmn&$Bz$-HP&nI2X?GVhId4gtDvnF~Bbf33gz1^)A`|`-P9LoG z>??#4(;ePU%air>E#E-}V1ej7#h-nRbR>JVSi=IXnssFX*Rq*F=N9LwCGIqLs`MP1 zF9P4aMFvkPm@R^#)r_nw1P5j=&XJTSD=p}$`glCqw)vh_p<)h~vPb1wik|HGknz*$gDn1KN$r^T!u9h~%( z8WF?7C{R+09aN2@qK-0P=i~?>-=E#_PhAB9M-{}~tp4`$`Jnfri(0y~CgiPC3YtD# zOrp+7RZEq`^hf?5o(y|I)*y8?#D&F{=kEMEnn4&0W+@-QRwY5UGun%*6qs`nsLjJk zj)Ybbbhgn_D>zX`LQYcoUA69()nu61k)6#jEsn zX20whI11|iJ)=g!Tw zFZol`@Mej$4Km3)k2%0!HO^Mq&oF1(5ZnJI4?9<-e4mQF0-1ndGE3W+rfk*WujPtCT~>Q&3LL#O3_q zJlr}+rP90f@?ny8d~S{q2Zs^>y}_l+OOgMD0ssCH8y(5PWiXB%JmGZAw@=8X39~$U z_t!M1N5qwr>CMd~C^ypt$x;^abehU#j({4N?~o+HA64K{)zbm5OW`f)j)3pL{tFXv zJyIf^#T=j~V<<*T%~`mnxm~2X=>hL}82lj>t)eWDi$KGdwGjOGcOauX%WIu&g5XWS zOW4}kuSaW;e|jfLN|8iwJ_3|l0tSnygYd-=;tzaAQhttzU?SRo;m^l(0+_!}-tgi- zP&)vbW`UXlpoY<33bf{bfc{YT^i3YQ{}m0W1R@s;c6EbhBItC#O?Pr9Nyx9?F%HQ^%S^bDF|9`~)U%y4nzu3<9_V(W19}oE2F=XCOt+llk5e|Be z-@CMwVVGE6&QhR4X9pBp{x@0tKQYpqHEU{XAC~>vJ5}G^thoUZBgNI7!NR(_>3vu2 zlBuI3hrcX!M7G0kcYqcLuo7@k0s%@n6(~x=ge?h($uHU=SVf6%4}h9UUycF1@^1_v z2A7za;gvrS4M569aAX&*n%&n52B>|#RCJo@1W3_eoIUZz0vvxt@PH1W!23r5s{|n5 z83%k!rI;9s13~)DP^Vm|=VBDIj6{}3{a@7H;VB~H;g$5v(H;XHMpXA`Iqc6n#-+xO zL_=>eB+YdbqP|b#+0eQadjY_a7|_kHi&5&DEEmLD*)jZ0y5O=mOuUS{zY_vYH$Fdp zUG|8E5cMyX2sWO9jy{?D!M0!(muWwdE13X0_wBScmS&}2h5huw)2>rAqc-Dc(z)u7 zM7@|8B=`GRqEj`)LLG!7h5_6vL}AI zKj-}0-3&-~!8ET#LLqu%gbR;dTM(N}h82+k!}9*S;c)t? zvpPW1=L(|aYbwjP7^b~Gk)3TAq&G_w*0|{_We&<)6L9`{MzY&hlfq@M!P-9xEpi{0 z1n}Nn=}=b!+JA%p09uF_w*}~$Haz<#rMuQ^O?vL#&neNr@`PxBcMVp%Dc>P}IBQKh zic6_-Nl_o-^DDoK(-pri|24=g3^QX=ygJ##(}TxyjO_A*d9GpVp_i#q%uBzBU0h8;5F_2T@H$D`RxK4m}56a2(~&0T8STlT%=7xp@+oD?6Tf zKE0O*%+h!mv=Y0w8+8|xHN`{p67tflVb7GtD#yBsuRc$zAG&G8+rZ1&`e{JVEnjSk zs7`YBzkVU?Ct`Qq#pxl2L0b*eBJ(WB>{Lz0)CP__Br?GrY^2fwwsC>G+8T$!fWY=c zN)3h=mZ$@^nQ1^^b6#QKbh}IZI=I8W_|2>imw7FzJF<&LhC}h3y-H8)pwo!{R!ylsB^x+i?io8)PninLJo#VeSS_8 zy*2A}*ePX9~aamKC)koBOUADxvUAY=iYxfpFDXqH} zmhcv9Y3u3S!O_kRQ-j?1-VTN)|!4dJx4!a#J?+Q zwom=!1Yvi`}K6oaviRmj)D5=Ou zx{m0gZbD`1h0~h@khpM?7-^@bfiTPGe^q!4 zSGf#*-nJ^Vws8zie2MpzS)=)<*==*0u#|?L4c=yEvLIv7UBs*yhGhB7z}TFIc7k52 zw)=63W{GG&-n89POI2HWBSrVJKzUxnWTSz|_DlEFUO<-cZMNGt%c%aumS`C9nAL<| zX1w=wOTi81Hz?0pPl!uMFrkFBtcdHESX7tITu5k!LRz-FFKz7ybYN>=SD!^SKmEQ` zSH$al9vPC<5XOEk**c>9vdxW|lWAarKwcd0(u%uOf~GFWw_^VGmo}JUP3$!Nc|++& z^Sb@Fd%pcN(cChVEv3(6>nLhXtVi_05V^-;KfIQnZNIZ>*Fn^VQtq26(lCjv2Qoau zgu$uVGmJd;>N>;a-V2GdHQWXK%MYbO?KHY*kCAeVwSf)UWfu?a$QT&eqJB%C*4SW7 zl5O22UrEYt&@a$^8Vb*Ard3rZIcoWuj3oP+w3c(-RDpmUWM9Ds}yNrvJ&MjN0 zUWw#z^HJ@**oRq>Tyzp~mGodnovrWopE5??$Hl2~mc&=07M(J#y1?#1AY_kSE?W&F z=ZS;D{2A48L(N9R@rK4N{WTBM_188B?W(FZC8eWeV&HJzBH+U4jncB>nPzMGVB6yx zS?kwAJwwv{{k0N5>kEzCL~fT8(v+Z9gUOXq^VMj_WL}=T7dv9X?-|`bmI{t2>est? z$xbh0=s6PaZed|;TUZ=R{mjYiWCo2n7L&ibXxu|TQGV#@*p=QVT&g!HA$J&|tW|0E z*8L39nJ2&;9g?4fKptKv-b1_BSIt5MnF&#OX&zOw+U5_7IM~i~@oYyim3=+-5tJ7YeQxMcG7PF)7 ze^@3EfWL`0TsWz#UXfGTtU7iQhHFAdJjjf?B)9#iYQC;z zVy||cSyL(2a*Ic&rY5UYd#|(qu%|8r!dtZ!iPLF$_}F2I^t&6YTkanNZ0p{D;c%Ug z>R=PIZSvvRNK%$u>@qK?`(n@U%M4B4D>ZnNydXOplaj;ZusFPKqoh&T-l89)>ul_n zjNtqqlnmmgu%zeoWHk7<@1kN?y;}4I?(~Kl!bn|0(Bl;DezTK*$B?7}YVKbyWq@J^1el zz^XqJJ4+aRzBT2T2UE3`~nBYX=BsO4yp`3#hwo+VIXW zfyNdH`QnOF5;Em|`A3W=7-gm))C%+DVz6WS0sHy4S7RwAj$zPrH+I*7>1jqiS2a>;&qAj94dw`5#LVeu zi(D&qi|w+F=UR4Li`%%{g2eo zLX^O2tzGHoIZ>?<60$!NU^K&5tix`kdUO+<^n3_mtlEETj&8#(w(K{(e;`=KW%G}X zV;3KA;(Ye(!gIGu#4uY5E3WBzoYIBVb8yJn_@zVRyRNdSrDAF3Ux|s~vo~Tfc2_T* zYXaL3rMFG?}fZEOSaMolW4{pRpN|0e&rR;To{Hm90uxUB)(|`+l>gWY6aa?pSR+BlI+ULgvp(It(B*3 z06-&ERK{etttGzrhFeK3>koV%V`fdGf)^(3&M+mOZkjQ!TP2KUq!*>^5dz{ZuDfeP zrC#ye~iM=_|Oi$wl1sV(D2Rm$8z2W-SdcEog~6q<_ka@Q10xGEq58lxmN z31k#n)4xvIVacA0!C!9loQ1#_HGhZN8(7c!gVq}nCIo>A7HLfaXJlXy6L7Ne_!`hA zhnhz=P2Q5JuJ;d(98At-OK7RpfwZ##QIKYtq|ddRU3pDUscCeY$I_uFnQN>a9}QMZi_+@%3Y9Xu!k;OM6eN?eR})%Rz^ zgJ~rP`3<9F|FDZj7Zpp(3SkDuCqrh^G(@7~1 z>UN2D$q|anIV!}vdA$P*F5L+ZF8sxM<+cruS~A^sBM(=-Y&d_c53_UmY8J^(F63g* zEGSX-RO1H^{o?dnT1%Q=3~XMeUapuro_b)2>O{5>#ol3UNOpz)%lS~Zqr5}xvxtj6#R@Y61rjG34u zLVKeZxVTz{W^ZbWl?j*={p1u=X-A{3WJ7VF;53&qw~ErcLhzghhuWIFMAbS6XGBdX zr_Gd0vgc!$aX#EqH5H25!5d1S5IlTzvYDh^yvql#PmPf`(@NNDc3;EHQ3vOj;D+>> zrKq<7afmb@yDM*Us3uMmXK~9KnNs~sdqS&AmOAW2g_cFQvMgn9ecoS)Hd8I>`6$Nd zvW5kYYPtLBgRw~^O7wY0uPZcl_3ls0Y$%>dFiE8hYhtOvF}SJ>b>29Pqq@FbiFOL3yVH>Oj*?_wBqMJ>?I^IZj|8-WwRKfB-cY0t3!OVF;Xw2j9fk&Juz60NF`OAYP{=w3w-HK$(TfUZFF8k#Sb@8Y<+W=#GJ2+75LJ5 z7sW5oBsb6N)8wJ%?}mCrz?1r!$1(QvmL-~h7##oW*R#IyMiBtsQ89p1JLiCE2~8e} z#@|lMb<|o2Ens9catyOo!9Unli{p(I-{q-nXiUG~w71-E!0*9E z>f)G~5;<RV0`i)psZ+-U7^GG@ya{WNlXeK@lOQj76Fxg z0Kfvy#>i`8&VkCx6?uR^ye|x#9-j7;J=D*i866D%t*-sz;!x`p*#P62=H#09@8#oo zY$C+P>qbxp$&^=rJ1G1On&P%cWG)+3u(UT4Am~%}V z>ruV<X6^-tPt7f%h!8+553m)UoOC~G(m1X$Bk%Uo=ai{6s(Tpaygm-;!<9B%i2+cHa zGy=XZd`Hu}=Th2?GE*=^`|2Ojv=?fT@m5|6fwf+i71D~jYK}Bm=lg-G`N zp&q4!M%JD#8xbCZFE+ZOUGh3TqkpB?CwDODAn~{nE~y1}2ku;!lxn%y5u^`7pSajW zDJ+gr@jf7jK6G*l3|jBArmamN^zGl}Yj;{`R#G2-&z_b;F2KN>UkaXdtuP$4<)-@)kj>r@DG%Rg_F!IT(Ls~bCSHJ-}HJX zxifGRqA?HOg3av(oR8KltO}M=GyW1w=iEockn1)0|mFZuONG zd(~@cJGOVG8~bDBXH)SPRsIAEou&1NX~am>Y@}x5BoC(^tjw~^PXE<(=+_#U8rm$q ziA}RF0fQ&C{5G~&PUug-CzNHLj+Xubu3#{|(1rLG9^xfkBg>UXuWsM8Vc6@q{d@ic zEQ=KSbF+tY9ut2wb&n5i1ZsV*1%xSHjhM)J?>m^N%*0eR@kb=#w}Gg(Z%LY)Ed3XU zh$k=2JcPMnW1Lm6hee+e_>J8RlM6c&)u=I8r@a5hyF%sBowSA_r|&6~K# z)w|>r#3k-fHMYT~+tc%|Sd+etU`3kMfqPB*+mv_-T~Q25Nln&UhCV9W#@qDQg3Zrh6m2aJrkMu=4`!$gamgn8prBsXH4-MYl^dz%B%1@kMP4m(n{`8N6_uJ86m z+4;o9%lqx2Ti!BNEpC=AO}mCJ31;hllN@7^gI1TCL8_50va8#JiV+{7O)Id<<+%f< zj6g+!roiD(ud3RNN%{(}maL&C4}Ai^wmqz#?e-0n=Dq^h-3Y|B-#XJ5Kp{%N8mw=6 z9lmIvZdoi^%We8@$-I5TNyYQtPldAXDt2+GRU@o_kFWdpoLp?ZD%V-8_Q8B3b=B!Pm4*CwERZBuc)ifBhcgufuiAQfJzaZ$SFPm0Ds`Ke{;HyYx&Gw}r!#z^b`?o61dt|YeJ+1LF;#f#;=4b_tM>$P)p zz2}&umr5tAy#h0;$|~)GfAp=<5PRqTY%~U(x5DpHnLNoa)pG~!6oRcIpc&Y8`6s=3 z#4K52>4e>05N@!2Z99l&DV@EdSB|!6dPQC1*rt5URa(z%`-YB1cam7ipc6(^ytd}L zQ@WDk`BlbXNK#&uyl)1-b-OG|r!#w3OHC!tKnM&LjMD}8d6_Lo=68zfY8&jJ`I9^5 z8TFcK<#bYkI-BveGhTy>p;pj~oTNth!NgV$Hz@4$t7k<3shLzo>~^&4)aHNwzBIU= z-|rEmRN0=a@le5`dZEp+0~_?PORSgS(J$Ux2BLD+zj!?zQtY|44kr_od(+KjwAxl)uwqX=Eq{36-RhKdGw1{&>H^Y zdHH0BKw7*y))}F(v!=X}!M)QzMr)8B`35!M2LODQQkKKsDkBQhrOb111$W=A&H<2N%JI>JryURAU1!TEvEamhnf4~6&lsY@)g@AP41ul?)o`1Yg| zZ}<5_4^i>H_bd$We+#IZR|gnR6B^&kpn9&3rqOjhKhxVgqt<8imgZ{KW50lhDvNR_ zn^%uShdZ+|78RifW!9F>7MxP2mO=}^7Ubdmu`+l3V=sJa697cV(2G_=@;`)}bXz~R zB$e#M2#CWE4%wt*19Xu7LGpTX8qA5yj8_(>9VWN^w?d6PNv~d6wA{-jHXCubQr79cVDKgB?kaaX9ti1DI8~NOimU&esay%F~D{Gh|^$eXr zO|X(k{X6G0!`M#oY*_c3Z6GQTXlur&S{)$JF0iYC78V5X1VFoUO1A**11~VaKzon? z5Sc*xbn2%8Z6puqp88Dc+HokHARI;(yUySumoaV(YP|;h!OTl$W@aEO%1-A@lOsTx zYUfG&v4W&7oIb3q{QP`?NTuVD@I1#>Z}IWLKN9;oU(|H;odI3JGjj?6 zHTS+hrCdF>Js)v5p>ud_jN{@tyXC^-{iafGbAS>OKaB<04+woV7gKHVrOo!M#TSPv zWk2Hme;TV6ACS7z`eP^PWM_4_$Oy@+3JiU-?WsKwE%4tQDsbI@IaAk+jQXjQqg$9- zPs09H$Ex`y$Hs&X2KY`>f*Ll|$omh!C*Z!mZRnAK<5t;TCQ=>UJnen!TH_CUtv!-U z%K@1eN>BpLeE$=e*02h|WjMt0zubI1#-b`O9iWm84JsH*wu9MClp=9SwrgtCg4C%Z zyE;@_C#=6LUIzsv0p_MFj-hUJK98BW0NVTr_z$4gCp0x~AKxGmvMPu1hFy74&CsUV z-2x#EFTJ5-bFaYkVWe<}w1Qjnh8OKE>R1H|5s23bivAw%*Ol0YmN0ROkry-?nIuTY zb$(un%FY4&B3|jZ-2iNuhx?yc;I_zVExGIPV)Yg2HIM!}*ilgO=c=P&$>3l}eDg?! zqWVEs((98Wm1fQiubC=cK_+C+_P$Hmq&L7@hi=8mHYal<`BRT9P!_=o2_fR$+z;u$ zBQJtx9xC|(d%+G8pR?jW$-U-7z!X=>Qw zM4w2KArMH&$x**EdtaPlbW3qxgIO<@SV=n2w;NjB#=p3(a*>-W;4rPQX<-uio}WM4 z&&_=&8c|-dJdL8{bGtTbXt?OT*gr5sA-56tJmI(rouDg>Q(hayq;t(X zF-7P$m-p#ytz$(#7Mo=Sqx1GIfa=ek9v4<(<1J*LfY3r^UAcyIFKr$C`e2#Q?rpfC z_mOz5y@*#J=WvU6-c!#BmzQ%gdMmb$cOW4QBxCET$_Wdm@0I=egl1Sr?(_MqM=lN4 zhP(Swx5mB}I(5vM7dE|Jh34?^F!F^o_B+>wsE(<1a@FmpER>JmbSwK>uhydU#oY9H zBP_+)u-I3#koc&iP7kbOwBwJtH~G^0ThsIH%G}kugu3HjLR_3GbE?nzP2Q^>-dB|1Cn@iiUZ7mZ|jiOLx&?LRG6eEFtI*;=#4h) z^4brU6=u!A-!ppHj>K_U@xB3#(aAC2WXhwGekIkwW*dmy+#2k-<%nVLb;ymaScG~| z&5guF_mOM9Tw6LJ%u0*Qmc@e#^{+l3SBZeZZm;G)dT#6S^fSiC@<(PfJ9%q8bofyK z(b=(k`{e->Q!<3#?+0m9NGjuor1|zc)fraK!xd?;^>T!rZZCJ!?IedBoRb=p6W!12 ziCfL=x+sUq)D1^bn~-IvpsBgH?bvc7E_2%}pnAE}XZx1@c7WXnA=U}2(dIy>u7Gdr zS*jTJn0?5z>!dr2Sq)3d9^@9H43B?TuI0P|cy2djd(pq~cH(g_&n54j--mF&kS`j0 z#-zBX7@k`DrH^DE6ze4(`eC3 zt{5!ZS8@370@B0fUo@)nZfr$YE*w}LbAZZTpU$=|E0Vl8ocIPFh#~e{tL}RkTMacd zN7y6=z+zsbroLy!tFSs7JaM=*q7cAv-|DlqD0oQLQ|BPty%jN4 zouum_ieIVp%ifMR?c{qCZBwBdoiDB*r{>E>O9vn@UwA#|uy zrbt-Dt^cLP>GeHP$*1zgX1%Iw%$W7zW}%>cq)pICCoP#xnRs!Zg`P7t^bLM^vCIje zr1;f+9WuAIJ4TQBynHb>kTuFTpG>@IABd$Vw?9tUH?WkkIy z1fKY|!=^a)>VuFf?ALtd!Si$an!`xikSdmCohor%B=}V-o~S-KN}eiNzST!RHd9|s z=W*|AwztM4L4A>H9NvD=CEbG0XL7MSaGjt=dV8dn_l&ksyBc&XBETpu@A-x5U>(O+ zjw=f2#ZXw5b!Kx&tT~0yM5gZ_tfDb+<7hUYSIKcjdk}3+4skFe^rAZPH=1JFFWKkJ z(J!9~X$SU=Rt6T`sm}2uU)+0g1NEvC8eG@Cs4)#3^3emw+(}Dsr|0ZC{(_S}ZYNN? zgMTinPEO+4hYI*Z2cjI$*vjOd&cfG$b)gIGIbWT2WFEmnR$UE-sXNL)cHRrfvIpW% z=47+=;P}jUT&Zd=O5XME2dZFld-vO-EW{a)3%b2?9Zy6#_AfIe6{@Zr#_K zF2_r4nx!s4n=lRG7a85_b!1LPS*??E(91Qqjn>{e62D#%Dv%yb8=AMEeoHSuxsgUr zt)-Qz27?P<%PU^X>dac_z950>E)ki1TRSNUxUmrPESx;V__KRLhr0SgtiCAESE4a_JE_|!_Co9f$?`+y8fL_}E2CSVh5d`2UoVI_(+5@`% zmnP8v(1QAR_tOXRf3&mzJ@cni^zTLcf9an6d)fSZ+58J${lAyZzn9Jb*UM(70zlcf z9KWQmE6d_@USvx!ThMRrpAoY+e*?i=gWFBVBWD_jP2x58JyR^ za;qI0Qgh|J3GARS>HX|WprOG*CWGPi@|MuaYUljbcLihXMFyFB-A17=4|i4#fyx3^ zvVO6m&i?0fol&-a$8Q6MeAZ-~?6sT9JpGPKA?RW5HBVZ*I=~@qD>ndLjrx8A3`h@F zu%s0a4GlpS0I}T)7PFznONg$i=g$b|3X21~wVAvE!Yf#SI{=pTUjXokxCdn5oc^}I zAHd|*hy!}OY}Vih>k3+*ehW!9gjmsJMO^`zX=k4eI~Q@6Y4F8CBI54gC=QUf1+Hek z5{p;~y!G^+kFR2?`-L!aI3D@`(QQ1-ypY(jN;j!$-C>ww^q z7oG%GkYM(Q`2uM3X5;*Hy5e-@PI*}!EtaxA)~}9Nx!TCNNqIxreV>yu-d4i884}o2 z@!HW!P5unX7{GS*6*wqgsrM2nk}082cat(X#4Va$7&ynT;+7)5oK$e1B_T<@2ekN| z&iJ#SP3kMaMVIQn;=@Z~Sd;m!kuIflH8p5EE}eOV9?`Cck48qPR%z-l0@^b_k z=uP(4K}Bh>7GB2v?C0lT2;fy?Z4|3pywf>!NU1O7Ob|DGt2%!;Rh})L+p=CIo4RsB zJ^b0|h>~;-RFxAw%II7&4Bnv|_85&_wOIFPmhwL1d>J%zIslRAZOS33Y}g2?ep7cL zXmx5YX8xVY?>Pvh6xjsZeb{)MJ; zZ>uJkzwbJ01Rwn9?;<%~S=7J(boNbnkmEtlfD1EuzTe`@1(DwS_fqMinCJDp=NjIz zgYE#kHLWzff(8tZtbgE$D`^QV!^&TM_uyXp^^5d|tGk2i>}Fvy%d0ZVFQ*{u#u#ruEZp5=Ku3!}EbGVp#<20?ds9L&rV^EmCzl6}T1@j#a^0i^ z_{|kLkdou@GCRM3orXVCO4B7-8Tsf(3!tI^g#J}j7%U@omG|nbtq90gtWOotei3x< zQ)|5KbJ)c<6+uIj9S3((UA+9G`#=M^+g+oWGVO$PHjp|8<4|{htAu?E*;46)kXeqs zadhv4sR1{<4)v3-)E^}cnP^Dw_utM=RVgYad~=}~<-$F%12^^|CP7*C)^~fd+AV3R zKOCXPbuP^UfKx5JB+s? zw~t2Qlm*E?BvYdMvSR#&QpNGmiYe1#@(GYS2!yjnP$nT;*|({?G{o9jbwJ-m3VfdoPL&{b)baBVX|A?kS;lUKofgPh*@n8AQnI19>)xH|z z*IA>X4=utK?k}zxI^BiJJZ_E{-5+$$?h7l#oWZ?CRj^L3wX_aTU%e( z$}cSy^P8)*aos|6Sx@Mmem#w^`u0yjYk$)f{~PM=U$9yJSLW|OyZ<4WtP2Tmvps!l zt|Z?$Y_Gp1h}MRjogMemHy;$z%(7ttsJ3en0C$+K;Ff_n<@OA1i(_tc0-}zD_V-Wp zEtt0U|2%zr=Netm%aZUr`wx~dDJMq)4Aeb1{bdr1)q38Sr3}1xlcaINVCwLELU!vT z->FrWL?eC04nsgl6Npy2Q-U(SstWvg5KK`K>QgjP04442upQ@-JPBxw`cm8!KOd=EDrr$ z2SxTiK^r910K|R>HZkTK<^i=kc%r_0&3-$N?B`I868S?yqVGk`@s@8h zw`UV~lhjqNi`sU}Qs>)O<%j2e_xNFJa+-vxU`@c74F?WLmTB52MW9XTyQiO(PIc-3 zdsvbnjfDLrTjqJ4>tQ0{D(9tiH^;ccbffv)L4^!!tgZRXXaQS5UNjpN7JZXB+B3og zWOCK_vh6o+3XS`IoUN3S3_XYiv&mRdp@9c16ac-}SKx{hyv_i;^;_GS7^1q3|Is4} zK@s4vrduW-Ju5n68;*d0LtEeh_LAwBZP$ROrqBBw-m3*p1Q_9QXHeS33lwOu|JS)c zuAH-d^5tDKwUHg7;=@RjWI;xC3*!BSeKxNz2_dj4lKp&+T&;hMhzvx$eANSU$CDAl zyl3`l!MROJ23%~{+JksO$Cis{>%@At51R0#gwDKxb04g+wHrsxVtT(;KO3Jx6&b!V z?A^}7+X_boMxe^pfgEBpA>M&3@(~Zy-+@)Rgdw$obGM`z8o34%dhTFqB%yP^c^-X` zw+|0}{aNmON1oxUvR>q?40uAc%6SWu95bE7`zE&fYpg36kq6!~2E*iF=_Ky6c1Bv#hE3(%5{^R?=cOYFYLrB@5w&DK)=xGN5 literal 0 HcmV?d00001 diff --git a/static/npm-send-private-tx.png b/static/npm-send-private-tx.png new file mode 100644 index 0000000000000000000000000000000000000000..0f2bad23424d8f5d7f952942e883fd809847c1d8 GIT binary patch literal 160887 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