├── run.sh ├── Procfile ├── tsconfig.json ├── LICENSE ├── package.json ├── params ├── devnet.json ├── devnet_multiproc.json ├── default.json ├── testnet.json └── testnet2.json ├── .github └── workflows │ ├── codeql-scan.yml │ └── trivy-scan.yml ├── .gitignore ├── src ├── sequence_enforcer.json ├── scratch.ts ├── utils.ts ├── listen.ts └── mm.ts ├── README.md └── yarn.lock /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | . .env 3 | yarn mm 4 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | devnet-1: PARAMS=devnet.json yarn mm 2 | testnet-1: PARAMS=testnet.json yarn mm 3 | testnet-2: PARAMS=testnet2.json yarn mm -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/recommended/tsconfig.json", 3 | 4 | "compilerOptions": { 5 | "outDir": "./lib", 6 | "target": "es6", 7 | "lib": ["es2019"], 8 | "allowJs": true, 9 | "checkJs": true, 10 | "declaration": true, 11 | "declarationMap": true, 12 | "noImplicitAny": false, 13 | "resolveJsonModule": true, 14 | "sourceMap": true, 15 | "esModuleInterop": true 16 | }, 17 | "include": ["./src/**/*"], 18 | "exclude": ["./src/**/*.test.js", "node_modules", "**/node_modules"] 19 | } 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Blockworks Foundation 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "market-marker", 3 | "version": "1.0.0", 4 | "repository": "git@github.com:blockworks-foundation/market-maker-ts.git", 5 | "license": "MIT", 6 | "main": "lib/src/index.js", 7 | "types": "lib/src/index.d.ts", 8 | "scripts": { 9 | "mm": "ts-node src/mm.ts", 10 | "scratch": "ts-node src/scratch.ts", 11 | "format": "prettier --check ." 12 | }, 13 | "devDependencies": { 14 | "@types/big.js": "^6.1.1", 15 | "@types/bn.js": "^5.1.0", 16 | "@types/chai": "^4.2.14", 17 | "@types/jest": "^26.0.9", 18 | "@types/mocha": "^8.2.0", 19 | "@types/node": "^15.12.4", 20 | "@types/yargs": "^17.0.8", 21 | "@typescript-eslint/eslint-plugin": "^4.14.2", 22 | "@typescript-eslint/parser": "^4.14.2", 23 | "chai": "^4.3.4", 24 | "cross-env": "^7.0.2", 25 | "eslint": "^7.28.0", 26 | "eslint-config-prettier": "^7.2.0", 27 | "mocha": "^8.4.0", 28 | "prettier": "^2.0.5", 29 | "typedoc": "^0.22.5", 30 | "typescript": "^4.6.3" 31 | }, 32 | "files": [ 33 | "lib" 34 | ], 35 | "prettier": { 36 | "singleQuote": true, 37 | "trailingComma": "all" 38 | }, 39 | "dependencies": { 40 | "@blockworks-foundation/mango-client": "^3.6.2", 41 | "@project-serum/anchor": "^0.21.0", 42 | "@project-serum/sol-wallet-adapter": "^0.2.0", 43 | "@solana/spl-token": "^0.1.6", 44 | "@solana/web3.js": "^1.43.5", 45 | "@tsconfig/recommended": "^1.0.1", 46 | "axios": "^0.21.1", 47 | "big.js": "^6.1.1", 48 | "bigint-buffer": "^1.1.5", 49 | "bn.js": "^5.1.0", 50 | "buffer-layout": "^1.2.1", 51 | "crypto-js": "^4.1.1", 52 | "dotenv": "^10.0.0", 53 | "dotenv-expand": "^5.1.0", 54 | "tardis-dev": "^13.1.3", 55 | "ts-node": "^10.7.0" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /params/devnet.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": "devnet.2", 3 | "mangoAccountName": "ddmm", 4 | "mangoAccountPubkey": "optional pubkey string if your mango account doesn't have name", 5 | "interval": 500, 6 | "tif": 10, 7 | "batch": 2, 8 | "assets": { 9 | "MNGO": { 10 | "perp": { 11 | "sizePerc": 0.01, 12 | "leanCoeff": 0.0010, 13 | "bias": 0.0, 14 | "requoteThresh": 0.0002, 15 | "takeSpammers": true, 16 | "spammerCharge": 2, 17 | "ftxSize": 10000 18 | } 19 | }, 20 | "ETH": { 21 | "perp": { 22 | "sizePerc": 0.05, 23 | "leanCoeff": 0.000375, 24 | "bias": 0.0, 25 | "requoteThresh": 0.0002, 26 | "takeSpammers": true, 27 | "spammerCharge": 2 28 | } 29 | }, 30 | "SOL": { 31 | "perp": { 32 | "sizePerc": 0.05, 33 | "leanCoeff": 0.0005, 34 | "bias": 0.0, 35 | "requoteThresh": 0.0002, 36 | "takeSpammers": true, 37 | "spammerCharge": 2 38 | } 39 | }, 40 | "ADA": { 41 | "perp": { 42 | "sizePerc": 0.03, 43 | "leanCoeff": 0.0005, 44 | "bias": 0.0, 45 | "requoteThresh": 0.0002, 46 | "takeSpammers": true, 47 | "spammerCharge": 2 48 | } 49 | }, 50 | "AVAX": { 51 | "perp": { 52 | "sizePerc": 0.03, 53 | "leanCoeff": 0.0005, 54 | "bias": 0.0, 55 | "requoteThresh": 0.0002, 56 | "takeSpammers": true, 57 | "spammerCharge": 2 58 | } 59 | }, 60 | "FTT": { 61 | "perp": { 62 | "sizePerc": 0.03, 63 | "leanCoeff": 0.0005, 64 | "bias": 0.0, 65 | "requoteThresh": 0.0002, 66 | "takeSpammers": true, 67 | "spammerCharge": 2 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /.github/workflows/codeql-scan.yml: -------------------------------------------------------------------------------- 1 | # GitHub SAST (static application security testing) tool that scans code for security bugs and unsafe coding practices 2 | 3 | name: "CodeQL Scan" 4 | 5 | # Events that triggers CodeQL to run 6 | on: 7 | push: 8 | branches: [ main ] 9 | pull_request: 10 | branches: [ main ] 11 | 12 | # Option to configure as a scheduled action to monitor for drift in code 13 | # schedule: 14 | # - cron: '0 6 * * 1' 15 | 16 | jobs: 17 | analyze: 18 | name: CodeQL Analysis 19 | runs-on: ubuntu-latest 20 | # Skip any PR created by dependabot to avoid permission issues (if used) 21 | if: (github.actor != 'dependabot[bot]') 22 | permissions: 23 | actions: read 24 | contents: read 25 | security-events: write 26 | 27 | strategy: 28 | fail-fast: false 29 | matrix: 30 | # Add more languages if relevnt to the project 31 | language: [ 'javascript' ] 32 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 33 | 34 | steps: 35 | - name: Checkout repository 36 | uses: actions/checkout@v2 37 | 38 | # Initialises the CodeQL tools for scanning (sorry Americans) 39 | - name: Initialise CodeQL 40 | uses: github/codeql-action/init@v1 41 | with: 42 | languages: ${{ matrix.language }} 43 | # If you wish to specify custom queries, you can do so here or in a config file. 44 | # By default, queries listed here will override any specified in a config file. 45 | # Prefix the list here with "+" to use these queries and those in the config file. 46 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 47 | 48 | # Run the analysis and upload results to the security tab 49 | - name: Perform CodeQL Analysis 50 | uses: github/codeql-action/analyze@v1 51 | -------------------------------------------------------------------------------- /params/devnet_multiproc.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": "devnet.2", 3 | "mangoAccountName": "ddmm", 4 | "mangoAccountPubkey": "optional pubkey string if your mango account doesn't have name", 5 | "interval": 500, 6 | "batch": 2, 7 | "processes": [ 8 | [ "BTC", "ETH", "SOL" ] 9 | ], 10 | "assets": { 11 | "MNGO": { 12 | "perp": { 13 | "sizePerc": 0.01, 14 | "leanCoeff": 0.0010, 15 | "bias": 0.0, 16 | "requoteThresh": 0.0002, 17 | "takeSpammers": true, 18 | "spammerCharge": 2, 19 | "ftxSize": 10000 20 | } 21 | }, 22 | "BTC": { 23 | "perp": { 24 | "sizePerc": 0.05, 25 | "leanCoeff": 0.00025, 26 | "bias": 0.0, 27 | "requoteThresh": 0.0002, 28 | "takeSpammers": true, 29 | "spammerCharge": 2 30 | } 31 | }, 32 | "ETH": { 33 | "perp": { 34 | "sizePerc": 0.05, 35 | "leanCoeff": 0.000375, 36 | "bias": 0.0, 37 | "requoteThresh": 0.0002, 38 | "takeSpammers": true, 39 | "spammerCharge": 2 40 | } 41 | }, 42 | 43 | "SOL": { 44 | "perp": { 45 | "sizePerc": 0.05, 46 | "leanCoeff": 0.0005, 47 | "bias": 0.0, 48 | "requoteThresh": 0.0002, 49 | "takeSpammers": true, 50 | "spammerCharge": 2 51 | } 52 | }, 53 | "ADA": { 54 | "perp": { 55 | "sizePerc": 0.03, 56 | "leanCoeff": 0.0005, 57 | "bias": 0.0, 58 | "requoteThresh": 0.0002, 59 | "takeSpammers": true, 60 | "spammerCharge": 2 61 | } 62 | }, 63 | "AVAX": { 64 | "perp": { 65 | "sizePerc": 0.03, 66 | "leanCoeff": 0.0005, 67 | "bias": 0.0, 68 | "requoteThresh": 0.0002, 69 | "takeSpammers": true, 70 | "spammerCharge": 2 71 | } 72 | }, 73 | "LUNA": { 74 | "perp": { 75 | "sizePerc": 0.03, 76 | "leanCoeff": 0.0005, 77 | "bias": 0.0, 78 | "requoteThresh": 0.0002, 79 | "takeSpammers": true, 80 | "spammerCharge": 2 81 | } 82 | } 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /params/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": "mainnet.1", 3 | "mangoAccountName": "Market Makooor", 4 | "mangoAccountPubkey": "optional pubkey string if your mango account doesn't have name", 5 | "interval": 1000, 6 | "batch": 1, 7 | "assets": { 8 | "MNGO": { 9 | "perp": { 10 | "sizePerc": 0.01, 11 | "leanCoeff": 0.0010, 12 | "bias": 0.0, 13 | "requoteThresh": 0.0002, 14 | "takeSpammers": true, 15 | "spammerCharge": 2, 16 | "ftxSize": 10000 17 | } 18 | }, 19 | 20 | "BTC": { 21 | "perp": { 22 | "sizePerc": 0.05, 23 | "leanCoeff": 0.00025, 24 | "bias": 0.0, 25 | "requoteThresh": 0.0002, 26 | "takeSpammers": true, 27 | "spammerCharge": 2 28 | } 29 | }, 30 | "ETH": { 31 | "perp": { 32 | "sizePerc": 0.05, 33 | "leanCoeff": 0.000375, 34 | "bias": 0.0, 35 | "requoteThresh": 0.0002, 36 | "takeSpammers": true, 37 | "spammerCharge": 2 38 | } 39 | }, 40 | 41 | "SOL": { 42 | "perp": { 43 | "sizePerc": 0.05, 44 | "leanCoeff": 0.0005, 45 | "bias": 0.0, 46 | "requoteThresh": 0.0002, 47 | "takeSpammers": true, 48 | "spammerCharge": 2 49 | } 50 | }, 51 | "SRM": { 52 | "perp": { 53 | "sizePerc": 0.02, 54 | "leanCoeff": 0.0010, 55 | "bias": 0.0, 56 | "requoteThresh": 0.0002, 57 | "takeSpammers": true, 58 | "spammerCharge": 2 59 | } 60 | }, 61 | "RAY": { 62 | "perp": { 63 | "sizePerc": 0.015, 64 | "leanCoeff": 0.00075, 65 | "bias": 0.0, 66 | "requoteThresh": 0.0002, 67 | "takeSpammers": true, 68 | "spammerCharge": 2 69 | } 70 | }, 71 | "FTT": { 72 | "perp": { 73 | "sizePerc": 0.02, 74 | "leanCoeff": 0.0005, 75 | "bias": 0.0, 76 | "requoteThresh": 0.0002, 77 | "takeSpammers": true, 78 | "spammerCharge": 2 79 | } 80 | }, 81 | "ADA": { 82 | "perp": { 83 | "sizePerc": 0.03, 84 | "leanCoeff": 0.0005, 85 | "bias": 0.0, 86 | "requoteThresh": 0.0002, 87 | "takeSpammers": true, 88 | "spammerCharge": 2 89 | } 90 | } 91 | } 92 | } -------------------------------------------------------------------------------- /.github/workflows/trivy-scan.yml: -------------------------------------------------------------------------------- 1 | # Trivy configured to scan for vulnerable dependencies in the project software composition 2 | 3 | name: Trivy Scan 4 | 5 | # Events that triggers Trivy to run 6 | on: 7 | push: 8 | branches: [ main ] 9 | pull_request: 10 | branches: [ main ] 11 | 12 | jobs: 13 | build: 14 | name: Trivy Vulnerability Scanner 15 | runs-on: ubuntu-latest 16 | # Skip any PR created by dependabot to avoid permission issues (if used) 17 | if: (github.actor != 'dependabot[bot]') 18 | steps: 19 | # Checking out the repo to scan 20 | - name: Checkout code 21 | uses: actions/checkout@v2 22 | 23 | # Run Trivy to fail the job on critical vulnerabiliies with fix available 24 | - name: Run Trivy for critical vulnerabilities 25 | uses: aquasecurity/trivy-action@master 26 | with: 27 | scan-type: 'fs' # Filesystem mode 28 | ignore-unfixed: true # Ignore vulnerabilities with no available fix 29 | format: 'table' # Table output mode as next step will report in security tab 30 | severity: 'CRITICAL' # Error only on critical vulnerabilities 31 | exit-code: '1' # Fail the job if a critical vulnerability with fix available is found 32 | 33 | # Run Trivy reporting all vulnerabilities to the security tab 34 | - name: Run Trivy for reporting all vulnerabilities 35 | uses: aquasecurity/trivy-action@master 36 | if: always() # Run this step even if job fails due to critical vuln 37 | with: 38 | scan-type: 'fs' # Filesystem mode 39 | ignore-unfixed: true # Ignore vulnerabilities with no available fix 40 | format: 'template' # Template output mode 41 | template: '@/contrib/sarif.tpl' # SARIF template to be compatible with GitHub security tab 42 | output: 'trivy-results.sarif' # Output file name 43 | severity: 'CRITICAL,HIGH,MEDIUM' # Report on critical/high/medium vulnerabiliies 44 | exit-code: '0' # No failing as for reporting purposes 45 | 46 | # Generate the output as SARIF and upload to the security tab 47 | - name: Upload Trivy results 48 | uses: github/codeql-action/upload-sarif@v1 49 | if: always() # Upload even if the job has failed due to a vulnerability 50 | with: 51 | sarif_file: 'trivy-results.sarif' 52 | -------------------------------------------------------------------------------- /src/sequence_enforcer.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.1.0", 3 | "name": "sequence_enforcer", 4 | "instructions": [ 5 | { 6 | "name": "initialize", 7 | "accounts": [ 8 | { 9 | "name": "sequenceAccount", 10 | "isMut": true, 11 | "isSigner": false 12 | }, 13 | { 14 | "name": "authority", 15 | "isMut": false, 16 | "isSigner": true 17 | }, 18 | { 19 | "name": "systemProgram", 20 | "isMut": false, 21 | "isSigner": false 22 | } 23 | ], 24 | "args": [ 25 | { 26 | "name": "bump", 27 | "type": "u8" 28 | }, 29 | { 30 | "name": "sym", 31 | "type": "string" 32 | } 33 | ] 34 | }, 35 | { 36 | "name": "resetSequenceNumber", 37 | "accounts": [ 38 | { 39 | "name": "sequenceAccount", 40 | "isMut": true, 41 | "isSigner": false 42 | }, 43 | { 44 | "name": "authority", 45 | "isMut": false, 46 | "isSigner": true 47 | } 48 | ], 49 | "args": [ 50 | { 51 | "name": "sequenceNum", 52 | "type": "u64" 53 | } 54 | ] 55 | }, 56 | { 57 | "name": "checkAndSetSequenceNumber", 58 | "accounts": [ 59 | { 60 | "name": "sequenceAccount", 61 | "isMut": true, 62 | "isSigner": false 63 | }, 64 | { 65 | "name": "authority", 66 | "isMut": false, 67 | "isSigner": true 68 | } 69 | ], 70 | "args": [ 71 | { 72 | "name": "sequenceNum", 73 | "type": "u64" 74 | } 75 | ] 76 | } 77 | ], 78 | "accounts": [ 79 | { 80 | "name": "SequenceAccount", 81 | "type": { 82 | "kind": "struct", 83 | "fields": [ 84 | { 85 | "name": "sequenceNum", 86 | "type": "u64" 87 | }, 88 | { 89 | "name": "authority", 90 | "type": "publicKey" 91 | } 92 | ] 93 | } 94 | } 95 | ], 96 | "errors": [ 97 | { 98 | "code": 6000, 99 | "name": "SequenceOutOfOrder", 100 | "msg": "Sequence out of order" 101 | } 102 | ] 103 | } -------------------------------------------------------------------------------- /src/scratch.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from 'fs'; 2 | import { 3 | Account, 4 | Commitment, 5 | Connection, 6 | PublicKey, 7 | Transaction, 8 | } from '@solana/web3.js'; 9 | import os from 'os'; 10 | import { 11 | Cluster, 12 | Config, 13 | findLargestTokenAccountForOwner, 14 | GroupConfig, 15 | IDS, 16 | makeWithdrawInstruction, 17 | MangoClient, 18 | QUOTE_INDEX, 19 | RootBank, 20 | } from '@blockworks-foundation/mango-client'; 21 | import { BN } from 'bn.js'; 22 | 23 | const config = new Config(IDS); 24 | 25 | const groupIds = config.getGroupWithName('devnet.2') as GroupConfig; 26 | if (!groupIds) { 27 | throw new Error(`Group ${'mainnet.1'} not found`); 28 | } 29 | const cluster = groupIds.cluster as Cluster; 30 | const mangoProgramId = groupIds.mangoProgramId; 31 | const mangoGroupKey = groupIds.publicKey; 32 | 33 | async function scratch() { 34 | const connection = new Connection( 35 | process.env.ENDPOINT_URL || config.cluster_urls[cluster], 36 | 'processed' as Commitment, 37 | ); 38 | 39 | const payer = new Account( 40 | JSON.parse( 41 | readFileSync( 42 | process.env.KEYPAIR || os.homedir() + '/.config/solana/devnet.json', 43 | 'utf-8', 44 | ), 45 | ), 46 | ); 47 | 48 | const client = new MangoClient(connection, mangoProgramId); 49 | const group = await client.getMangoGroup(mangoGroupKey); 50 | const mangoAccountPubkey = new PublicKey( 51 | '22JS1jkvkLcdxhHo1LpWXUh6sTErkt54j1YaszYWZoCi', 52 | ); 53 | const mangoAccount = await client.getMangoAccount( 54 | mangoAccountPubkey, 55 | groupIds.serumProgramId, 56 | ); 57 | const rootBanks = await group.loadRootBanks(connection); 58 | const quoteRootBank = rootBanks[QUOTE_INDEX] as RootBank; 59 | const quoteNodeBank = quoteRootBank.nodeBankAccounts[0]; 60 | 61 | const tokenAccount = await findLargestTokenAccountForOwner( 62 | connection, 63 | payer.publicKey, 64 | group.tokens[QUOTE_INDEX].mint, 65 | ); 66 | const instr = makeWithdrawInstruction( 67 | client.programId, 68 | group.publicKey, 69 | mangoAccount.publicKey, 70 | payer.publicKey, 71 | group.mangoCache, 72 | quoteRootBank.publicKey, 73 | quoteNodeBank.publicKey, 74 | quoteNodeBank.vault, 75 | tokenAccount.publicKey, 76 | group.signerKey, 77 | mangoAccount.spotOpenOrders, 78 | new BN('100'), 79 | true, 80 | ); 81 | const tx = new Transaction(); 82 | tx.add(instr); 83 | const txid = await client.sendTransaction(tx, payer, []); 84 | console.log(txid.toString()); 85 | } 86 | 87 | scratch(); 88 | -------------------------------------------------------------------------------- /params/testnet.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": "testnet.0", 3 | "mangoAccountName": "MM", 4 | "mangoAccountPubkey": "optional pubkey string if your mango account doesn't have name", 5 | "interval": 1000, 6 | "batch": 2, 7 | "assets": { 8 | "MNGO": { 9 | "perp": { 10 | "sizePerc": 0.01, 11 | "leanCoeff": 0.0010, 12 | "bias": 0.0, 13 | "requoteThresh": 0.0002, 14 | "takeSpammers": true, 15 | "spammerCharge": 2, 16 | "ftxSize": 10000 17 | } 18 | }, 19 | 20 | "BTC": { 21 | "perp": { 22 | "sizePerc": 0.05, 23 | "leanCoeff": 0.00025, 24 | "bias": 0.0, 25 | "requoteThresh": 0.0002, 26 | "takeSpammers": true, 27 | "spammerCharge": 2 28 | } 29 | }, 30 | "ETH": { 31 | "perp": { 32 | "sizePerc": 0.05, 33 | "leanCoeff": 0.000375, 34 | "bias": 0.0, 35 | "requoteThresh": 0.0002, 36 | "takeSpammers": true, 37 | "spammerCharge": 2 38 | } 39 | }, 40 | 41 | "SOL": { 42 | "perp": { 43 | "sizePerc": 0.05, 44 | "leanCoeff": 0.0005, 45 | "bias": 0.0, 46 | "requoteThresh": 0.0002, 47 | "takeSpammers": true, 48 | "spammerCharge": 2 49 | } 50 | }, 51 | "SRM": { 52 | "perp": { 53 | "sizePerc": 0.02, 54 | "leanCoeff": 0.0010, 55 | "bias": 0.0, 56 | "requoteThresh": 0.0002, 57 | "takeSpammers": true, 58 | "spammerCharge": 2 59 | } 60 | }, 61 | "RAY": { 62 | "perp": { 63 | "sizePerc": 0.015, 64 | "leanCoeff": 0.00075, 65 | "bias": 0.0, 66 | "requoteThresh": 0.0002, 67 | "takeSpammers": true, 68 | "spammerCharge": 2 69 | } 70 | }, 71 | "FTT": { 72 | "perp": { 73 | "sizePerc": 0.02, 74 | "leanCoeff": 0.0005, 75 | "bias": 0.0, 76 | "requoteThresh": 0.0002, 77 | "takeSpammers": true, 78 | "spammerCharge": 2 79 | } 80 | }, 81 | "AVAX": { 82 | "perp": { 83 | "sizePerc": 0.02, 84 | "leanCoeff": 0.0005, 85 | "bias": 0.0, 86 | "requoteThresh": 0.0002, 87 | "takeSpammers": true, 88 | "spammerCharge": 2 89 | } 90 | }, 91 | "GMT": { 92 | "perp": { 93 | "sizePerc": 0.02, 94 | "leanCoeff": 0.0005, 95 | "bias": 0.0, 96 | "requoteThresh": 0.0002, 97 | "takeSpammers": true, 98 | "spammerCharge": 2 99 | } 100 | } 101 | } 102 | } -------------------------------------------------------------------------------- /params/testnet2.json: -------------------------------------------------------------------------------- 1 | { 2 | "group": "testnet.0", 3 | "mangoAccountName": "MM2", 4 | "mangoAccountPubkey": "optional pubkey string if your mango account doesn't have name", 5 | "interval": 500, 6 | "batch": 2, 7 | "assets": { 8 | "MNGO": { 9 | "perp": { 10 | "sizePerc": 0.01, 11 | "leanCoeff": 0.0010, 12 | "bias": 0.0, 13 | "requoteThresh": 0.0002, 14 | "takeSpammers": true, 15 | "spammerCharge": 2, 16 | "ftxSize": 10000, 17 | "charge": 0.0020 18 | } 19 | }, 20 | 21 | "BTC": { 22 | "perp": { 23 | "sizePerc": 0.05, 24 | "leanCoeff": 0.00025, 25 | "bias": 0.0, 26 | "requoteThresh": 0.0002, 27 | "takeSpammers": true, 28 | "spammerCharge": 2, 29 | "charge": 0.0020 30 | } 31 | }, 32 | "ETH": { 33 | "perp": { 34 | "sizePerc": 0.05, 35 | "leanCoeff": 0.000375, 36 | "bias": 0.0, 37 | "requoteThresh": 0.0002, 38 | "takeSpammers": true, 39 | "spammerCharge": 2, 40 | "charge": 0.0020 41 | } 42 | }, 43 | 44 | "SOL": { 45 | "perp": { 46 | "sizePerc": 0.05, 47 | "leanCoeff": 0.0005, 48 | "bias": 0.0, 49 | "requoteThresh": 0.0002, 50 | "takeSpammers": true, 51 | "spammerCharge": 2, 52 | "charge": 0.0020 53 | } 54 | }, 55 | "SRM": { 56 | "perp": { 57 | "sizePerc": 0.02, 58 | "leanCoeff": 0.0010, 59 | "bias": 0.0, 60 | "requoteThresh": 0.0002, 61 | "takeSpammers": true, 62 | "spammerCharge": 2, 63 | "charge": 0.0020 64 | } 65 | }, 66 | "RAY": { 67 | "perp": { 68 | "sizePerc": 0.015, 69 | "leanCoeff": 0.00075, 70 | "bias": 0.0, 71 | "requoteThresh": 0.0002, 72 | "takeSpammers": true, 73 | "spammerCharge": 2, 74 | "charge": 0.0020 75 | } 76 | }, 77 | "FTT": { 78 | "perp": { 79 | "sizePerc": 0.02, 80 | "leanCoeff": 0.0005, 81 | "bias": 0.0, 82 | "requoteThresh": 0.0002, 83 | "takeSpammers": true, 84 | "spammerCharge": 2, 85 | "charge": 0.0020 86 | } 87 | }, 88 | "AVAX": { 89 | "perp": { 90 | "sizePerc": 0.02, 91 | "leanCoeff": 0.0005, 92 | "bias": 0.0, 93 | "requoteThresh": 0.0002, 94 | "takeSpammers": true, 95 | "spammerCharge": 2, 96 | "charge": 0.0020 97 | } 98 | }, 99 | "GMT": { 100 | "perp": { 101 | "sizePerc": 0.02, 102 | "leanCoeff": 0.0005, 103 | "bias": 0.0, 104 | "requoteThresh": 0.0002, 105 | "takeSpammers": true, 106 | "spammerCharge": 2, 107 | "charge": 0.0020 108 | } 109 | } 110 | } 111 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mango Markets Market Maker 2 | 3 | ## Setup 4 | To run the market maker you will need: 5 | * A Solana account with some SOL deposited to cover transaction fees 6 | * A Mango Account with some collateral deposited and a name (tip: use the UI) 7 | * Your wallet keypair saved as a JSON file 8 | * `node` and `yarn` 9 | 10 | ```shell 11 | mkdir blockworks-foundation 12 | cd blockworks-foundation 13 | git clone https://github.com/blockworks-foundation/market-maker-ts.git 14 | cd market-maker-ts 15 | yarn install 16 | 17 | ## Open .env file and set env vars like this example ## 18 | export KEYPAIR=~/.config/solana/id.json 19 | export ENDPOINT_URL="https://mango.rpcpool.com/946ef7337da3f5b8d3e4a34e7f88" 20 | export PARAMS=default.json 21 | 22 | ## Set mangoAccountName in params file to reflect the name of your MangoAccount 23 | ``` 24 | 25 | ## Run via terminal 26 | ```shell 27 | . run.sh 28 | ``` 29 | 30 | ## Run via systemd 31 | If you're running the market maker on a server, you might want to run it via systemd to have auto restarts 32 | ```shell 33 | chmod 755 run.sh 34 | cd /etc/systemd/system 35 | sudo nano mm.service 36 | 37 | ## Set the systemd service file like this and replace the *** lines with your own 38 | ***ExecStart=/home/dd/blockworks-foundation/market-maker-ts/run.sh 39 | ***WorkingDirectory=/home/dd/blockworks-foundation/market-maker-ts/ 40 | Restart=always 41 | RuntimeMaxSec=1800 42 | RestartSec=5s 43 | LimitNOFILE=4096 44 | IgnoreSIGPIPE=false 45 | KillMode=control-group 46 | ***User=dd 47 | 48 | sudo systemctl daemon-reload 49 | sudo systemctl start mm.service 50 | ``` 51 | 52 | You can watch the log output with: 53 | ```shell 54 | journalctl -f -u mm.service 55 | ``` 56 | 57 | And stop the mm: 58 | ```shell 59 | sudo systemctl stop mm.service 60 | ``` 61 | 62 | 63 | ## Environment Variables 64 | | Variable | Default | Description | 65 | | -------- | ------- | ----------- | 66 | | `ENDPOINT_URL` | `https://mango.rpcpool.com` | Your RPC node endpoint | 67 | | `KEYPAIR` | `${HOME}/.config/solana/id.json` | The location of your wallet keypair | 68 | | `PARAMS` | `default.json` | params file | 69 | 70 | 71 | ## Market Maker Params 72 | ### See params/default.json for an example 73 | | Variable | Default | Description | 74 | |---------------------|-------------|-----------------------------------------------------------------------------------| 75 | | `group` | `mainnet.1` | Name of the group in ids.json | 76 | | `interval` | `10000` | Milliseconds to wait before updating quotes | 77 | | `mangoAccountName` | N/A | The MangoAccount name you input when initializing the MangoAccount via UI | 78 | | `mangoAccountPubkey` | N/A | If no MangoAccount name, just pass in the pubkey | 79 | | `assets` | N/A | Mapping of symbols to trade and their specific params | 80 | | `sizePerc` | `0.1` | The size of each order as a percentage of equity | 81 | | `charge` | `0.0010` | How much to increase quote width from centralized exchange | 82 | | `leanCoeff` | `0.0005` | How much to move the quotes per unit size of inventory | 83 | | `bias` | `0` | Fixed amount to bias. Negative values bias downward. e.g. -0.0005 biases down 5bps | 84 | | `requoteThresh` | `0` | How much new bid/ask price must change to requote; e.g. 0.0002 implies 2bps | 85 | | `ftxSize` | `100000` | How much to look up spread on centralized exchange | 86 | | `tif` | N/A | Time in force in seconds for maker orders | 87 | | `processes` | [] | List of lists of assets specifying MD streams to put in separate processes (e.g. in params/devnet\_multiproc.json) | 88 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Account, 3 | PublicKey, 4 | SystemProgram, 5 | TransactionInstruction, 6 | } from '@solana/web3.js'; 7 | import { 8 | MangoAccount, 9 | MangoClient, 10 | MangoGroup, 11 | Payer, 12 | } from '@blockworks-foundation/mango-client'; 13 | import { createHash } from 'crypto'; 14 | import { BN } from 'bn.js'; 15 | 16 | export async function loadMangoAccountWithName( 17 | client: MangoClient, 18 | mangoGroup: MangoGroup, 19 | payer: Payer, 20 | mangoAccountName: string, 21 | ): Promise { 22 | const ownerAccounts = await client.getMangoAccountsForOwner( 23 | mangoGroup, 24 | payer.publicKey!, 25 | true, 26 | ); 27 | const delegateAccounts = await client.getMangoAccountsForDelegate( 28 | mangoGroup, 29 | payer.publicKey!, 30 | true, 31 | ); 32 | ownerAccounts.push(...delegateAccounts); 33 | 34 | for (const ownerAccount of ownerAccounts) { 35 | if (mangoAccountName === ownerAccount.name) { 36 | return ownerAccount; 37 | } 38 | } 39 | throw new Error(`mangoAccountName: ${mangoAccountName} not found`); 40 | } 41 | 42 | export async function loadMangoAccountWithPubkey( 43 | client: MangoClient, 44 | mangoGroup: MangoGroup, 45 | payer: Payer, 46 | mangoAccountPk: PublicKey, 47 | ): Promise { 48 | const mangoAccount = await client.getMangoAccount( 49 | mangoAccountPk, 50 | mangoGroup.dexProgramId, 51 | ); 52 | 53 | if (!mangoAccount.owner.equals(payer.publicKey!)) { 54 | throw new Error( 55 | `Invalid MangoAccount owner: ${mangoAccount.owner.toString()}; expected: ${payer.publicKey!.toString()}`, 56 | ); 57 | } 58 | return mangoAccount; 59 | } 60 | export const seqEnforcerProgramIds = { 61 | devnet: new PublicKey('FBngRHN4s5cmHagqy3Zd6xcK3zPJBeX5DixtHFbBhyCn'), 62 | testnet: new PublicKey('FThcgpaJM8WiEbK5rw3i31Ptb8Hm4rQ27TrhfzeR1uUy'), 63 | mainnet: new PublicKey('GDDMwNyyx8uB6zrqwBFHjLLG3TBYk2F8Az4yrQC5RzMp'), 64 | }; 65 | 66 | export function makeInitSequenceInstruction( 67 | sequenceAccount: PublicKey, 68 | ownerPk: PublicKey, 69 | bump: number, 70 | sym: string, 71 | cluster: string, 72 | ): TransactionInstruction { 73 | const keys = [ 74 | { isSigner: false, isWritable: true, pubkey: sequenceAccount }, 75 | { isSigner: true, isWritable: true, pubkey: ownerPk }, 76 | { isSigner: false, isWritable: false, pubkey: SystemProgram.programId }, 77 | ]; 78 | 79 | const variant = createHash('sha256') 80 | .update('global:initialize') 81 | .digest() 82 | .slice(0, 8); 83 | 84 | const bumpData = new BN(bump).toBuffer('le', 1); 85 | const strLen = new BN(sym.length).toBuffer('le', 4); 86 | const symEncoded = Buffer.from(sym); 87 | 88 | const data = Buffer.concat([variant, bumpData, strLen, symEncoded]); 89 | 90 | return new TransactionInstruction({ 91 | keys, 92 | data, 93 | programId: seqEnforcerProgramIds[cluster], 94 | }); 95 | } 96 | 97 | export function makeCheckAndSetSequenceNumberInstruction( 98 | sequenceAccount: PublicKey, 99 | ownerPk: PublicKey, 100 | seqNum: number, 101 | cluster, 102 | ): TransactionInstruction { 103 | const keys = [ 104 | { isSigner: false, isWritable: true, pubkey: sequenceAccount }, 105 | { isSigner: true, isWritable: false, pubkey: ownerPk }, 106 | ]; 107 | const variant = createHash('sha256') 108 | .update('global:check_and_set_sequence_number') 109 | .digest() 110 | .slice(0, 8); 111 | 112 | const seqNumBuffer = new BN(seqNum).toBuffer('le', 8); 113 | const data = Buffer.concat([variant, seqNumBuffer]); 114 | return new TransactionInstruction({ 115 | keys, 116 | data, 117 | programId: seqEnforcerProgramIds[cluster], 118 | }); 119 | } 120 | 121 | export function listenersArray( 122 | processes: string[][], 123 | assetNames: string[], 124 | ): string[][] { 125 | processes = processes || []; 126 | const inProc = processes.flat(); 127 | const difference = assetNames.filter((x) => !inProc.includes(x)); 128 | return processes.concat([difference]); 129 | } 130 | -------------------------------------------------------------------------------- /src/listen.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | import path from 'path'; 3 | import { 4 | normalizeBookChanges, 5 | normalizeTrades, 6 | streamNormalized, 7 | OrderBook, 8 | } from 'tardis-dev'; 9 | 10 | class TardisBook extends OrderBook { 11 | getQuoteSizedBestBid(quoteSize: number): number | undefined { 12 | let rem = quoteSize; 13 | for (const bid of this.bids()) { 14 | rem -= bid.amount * bid.price; 15 | if (rem <= 0) { 16 | return bid.price; 17 | } 18 | } 19 | return undefined; 20 | } 21 | getQuoteSizedBestAsk(quoteSize: number): number | undefined { 22 | let rem = quoteSize; 23 | for (const ask of this.asks()) { 24 | rem -= ask.amount * ask.price; 25 | if (rem <= 0) { 26 | return ask.price; 27 | } 28 | } 29 | return undefined; 30 | } 31 | getMid(): number | undefined { 32 | const b = this.bestBid(); 33 | const a = this.bestAsk(); 34 | return a && b ? (a.price + b.price) / 2 : undefined; 35 | } 36 | } 37 | 38 | type MultiBook = { 39 | marketName: string; 40 | ftxMid: number | undefined; 41 | books: { 42 | ftx: { book: TardisBook; updateTime: number; }; 43 | binance: { book: TardisBook, updateTime: number; }; 44 | }; 45 | }; 46 | 47 | type EquityMessage = { 48 | equity: number; 49 | }; 50 | 51 | const paramsFileName = process.env.PARAMS || 'default.json'; 52 | const params = JSON.parse( 53 | fs.readFileSync( 54 | path.resolve(__dirname, `../params/${paramsFileName}`), 55 | 'utf-8', 56 | ), 57 | ); 58 | 59 | function listMin(list: (number | undefined)[]): number | undefined { 60 | list = list.filter((e) => e !== undefined); 61 | if (list.length === 0) return undefined; 62 | // @ts-ignore 63 | return Math.min(...list); 64 | } 65 | 66 | function listMax(list: (number | undefined)[]): number | undefined { 67 | list = list.filter((e) => e !== undefined); 68 | if (list.length === 0) return undefined; 69 | // @ts-ignore 70 | return Math.max(...list); 71 | } 72 | 73 | let equity: number = 0; 74 | process.on('message', (m: EquityMessage) => { 75 | equity = m.equity; 76 | }); 77 | 78 | async function listenFtxBooks(books: MultiBook[]) { 79 | if (process.send === undefined) throw new Error('process.send is undefined'); 80 | const marketNames = books.map((book) => book.marketName); 81 | const marketNameToBook = Object.fromEntries( 82 | books.map((book) => [book.marketName, book]), 83 | ); 84 | 85 | const messages = streamNormalized( 86 | { 87 | exchange: 'ftx', 88 | symbols: marketNames, 89 | }, 90 | normalizeTrades, 91 | normalizeBookChanges, 92 | ); 93 | 94 | for await (const msg of messages) { 95 | if (msg.type === 'book_change') { 96 | const marketName = msg.symbol; 97 | const mb = marketNameToBook[marketName]; 98 | mb.books.ftx.book.update(msg); 99 | mb.ftxMid = mb.books.ftx.book.getMid(); 100 | mb.books.ftx.updateTime = msg.timestamp.getTime() / 1000; 101 | 102 | const assetParams = params.assets[marketName.split('-')[0]].perp; 103 | const ftxSize = assetParams.ftxSize; 104 | const sizePerc = assetParams.sizePerc; 105 | const quoteSize = equity * sizePerc; 106 | const aggBid = listMin( 107 | Object.values(marketNameToBook[marketName].books).map(({ book, updateTime }) => 108 | book.getQuoteSizedBestBid(ftxSize || quoteSize), 109 | ), 110 | ); 111 | const aggAsk = listMax( 112 | Object.values(marketNameToBook[marketName].books).map(({ book, updateTime }) => 113 | book.getQuoteSizedBestAsk(ftxSize || quoteSize), 114 | ), 115 | ); 116 | process.send({ marketName: marketName, 117 | aggBid: aggBid, 118 | aggAsk: aggAsk, 119 | ftxMid: mb.ftxMid }); 120 | } 121 | } 122 | 123 | process.on('message', (m: EquityMessage) => { 124 | equity = m.equity; 125 | }); 126 | } 127 | 128 | async function listenBinanceBooks(books: MultiBook[]) { 129 | if (process.send === undefined) throw new Error('process.send is undefined'); 130 | const binanceList = [ 131 | 'BTCUSDT', 132 | 'ETHUSDT', 133 | 'SOLUSDT', 134 | 'RAYUSDT', 135 | 'SRMUSDT', 136 | 'BNBUSDT', 137 | 'AVAXUSDT', 138 | 'LUNAUSDT', 139 | 'ADAUSDT', 140 | ]; 141 | const systemMarketToNativeMarket = function(systemMarket: string) { return `${systemMarket.split('-')[0]}USDT` }; 142 | const marketNames = books.map((book) => book.marketName).filter((mn) => 143 | binanceList.includes(systemMarketToNativeMarket(mn)), 144 | ); 145 | const marketNameToBook = Object.fromEntries( 146 | books.map((book) => [book.marketName, book]), 147 | ); 148 | const nativeMarketMap = Object.fromEntries(marketNames.map((mn) => [ 149 | systemMarketToNativeMarket(mn), 150 | mn 151 | ])); 152 | 153 | const messages = streamNormalized( 154 | { 155 | exchange: 'binance-futures', 156 | symbols: Object.keys(nativeMarketMap), 157 | }, 158 | normalizeTrades, 159 | normalizeBookChanges, 160 | ); 161 | 162 | for await (const msg of messages) { 163 | if (msg.type === 'book_change') { 164 | const marketName = nativeMarketMap[msg.symbol]; 165 | const mb = marketNameToBook[marketName]; 166 | mb.books.binance.book.update(msg); 167 | mb.books.binance.updateTime = msg.timestamp.getTime() / 1000; 168 | 169 | const assetParams = params.assets[marketName.split('-')[0]].perp; 170 | const ftxSize = assetParams.ftxSize; 171 | const sizePerc = assetParams.sizePerc; 172 | const quoteSize = equity * sizePerc; 173 | const aggBid = listMin( 174 | Object.values(marketNameToBook[marketName].books).map(({ book, updateTime }) => 175 | book.getQuoteSizedBestBid(ftxSize || quoteSize), 176 | ), 177 | ); 178 | const aggAsk = listMax( 179 | Object.values(marketNameToBook[marketName].books).map(({ book, updateTime }) => 180 | book.getQuoteSizedBestAsk(ftxSize || quoteSize), 181 | ), 182 | ); 183 | process.send({ marketName: marketName, 184 | aggBid: aggBid, 185 | aggAsk: aggAsk, 186 | ftxMid: mb.ftxMid }); 187 | } 188 | } 189 | } 190 | 191 | const marketNames = process.argv[2].split(','); 192 | const books: MultiBook[] = marketNames.map((mn) => { 193 | return { 194 | marketName: mn, 195 | ftxMid: 0, 196 | books: { 197 | ftx: { book: new TardisBook(), updateTime: 0 }, 198 | binance: { book: new TardisBook(), updateTime: 0 }, 199 | }, 200 | }; 201 | }); 202 | 203 | listenFtxBooks(books); 204 | listenBinanceBooks(books); 205 | -------------------------------------------------------------------------------- /src/mm.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Account, 3 | Commitment, 4 | Connection, 5 | Keypair, 6 | PublicKey, 7 | Transaction, 8 | TransactionInstruction, 9 | TransactionSignature, 10 | } from '@solana/web3.js'; 11 | import fs from 'fs'; 12 | import os from 'os'; 13 | import child_process from 'child_process'; 14 | import { BN } from 'bn.js'; 15 | import { 16 | BookSide, 17 | BookSideLayout, 18 | Cluster, 19 | Config, 20 | getMultipleAccounts, 21 | getPerpMarketByBaseSymbol, 22 | getUnixTs, 23 | GroupConfig, 24 | IDS, 25 | makeCancelAllPerpOrdersInstruction, 26 | makePlacePerpOrder2Instruction, 27 | MangoAccount, 28 | MangoAccountLayout, 29 | MangoCache, 30 | MangoCacheLayout, 31 | MangoClient, 32 | MangoGroup, 33 | ONE_BN, 34 | I64_MAX_BN, 35 | PerpMarket, 36 | PerpMarketConfig, 37 | sleep, 38 | zeroKey, 39 | Payer, 40 | } from '@blockworks-foundation/mango-client'; 41 | import { OpenOrders } from '@project-serum/serum'; 42 | import path from 'path'; 43 | import { 44 | loadMangoAccountWithName, 45 | loadMangoAccountWithPubkey, 46 | makeCheckAndSetSequenceNumberInstruction, 47 | makeInitSequenceInstruction, 48 | seqEnforcerProgramIds, 49 | listenersArray, 50 | } from './utils'; 51 | import { findProgramAddressSync } from '@project-serum/anchor/dist/cjs/utils/pubkey'; 52 | 53 | const paramsFileName = process.env.PARAMS || 'default.json'; 54 | const params = JSON.parse( 55 | fs.readFileSync( 56 | path.resolve(__dirname, `../params/${paramsFileName}`), 57 | 'utf-8', 58 | ), 59 | ); 60 | 61 | const payer = Keypair.fromSecretKey( 62 | Uint8Array.from( 63 | JSON.parse( 64 | process.env.KEYPAIR || fs.readFileSync( 65 | process.env.KEYPAIR_FILE || os.homedir() + '/.config/solana/id.json', 66 | 'utf-8', 67 | ), 68 | ), 69 | ), 70 | ); 71 | 72 | const config = new Config(IDS); 73 | 74 | const groupIds = config.getGroupWithName(params.group) as GroupConfig; 75 | if (!groupIds) { 76 | throw new Error(`Group ${params.group} not found`); 77 | } 78 | const cluster = groupIds.cluster as Cluster; 79 | const mangoProgramId = groupIds.mangoProgramId; 80 | const mangoGroupKey = groupIds.publicKey; 81 | 82 | const control = { isRunning: true, interval: params.interval }; 83 | 84 | type State = { 85 | cache: MangoCache; 86 | mangoAccount: MangoAccount; 87 | lastMangoAccountUpdate: number; 88 | marketContexts: MarketContext[]; 89 | }; 90 | type MarketContext = { 91 | marketName: string; 92 | params: any; 93 | config: PerpMarketConfig; 94 | market: PerpMarket; 95 | marketIndex: number; 96 | bids: BookSide; 97 | asks: BookSide; 98 | lastBookUpdate: number; 99 | 100 | aggBid: number | undefined; 101 | aggAsk: number | undefined; 102 | ftxMid: number | undefined; 103 | 104 | sequenceAccount: PublicKey; 105 | sequenceAccountBump: number; 106 | 107 | sentBidPrice: number; 108 | sentAskPrice: number; 109 | lastOrderUpdate: number; 110 | }; 111 | type ListenerMessage = { 112 | marketName: string; 113 | aggBid: number; 114 | aggAsk: number; 115 | ftxMid: number; 116 | }; 117 | 118 | /** 119 | * Load MangoCache, MangoAccount and Bids and Asks for all PerpMarkets using only 120 | * one RPC call. 121 | */ 122 | async function loadAccountAndMarketState( 123 | connection: Connection, 124 | group: MangoGroup, 125 | oldMangoAccount: MangoAccount, 126 | marketContexts: MarketContext[], 127 | ): Promise { 128 | const inBasketOpenOrders = oldMangoAccount 129 | .getOpenOrdersKeysInBasket() 130 | .filter((pk) => !pk.equals(zeroKey)); 131 | 132 | const allAccounts = [ 133 | group.mangoCache, 134 | oldMangoAccount.publicKey, 135 | ...inBasketOpenOrders, 136 | ...marketContexts.map((marketContext) => marketContext.market.bids), 137 | ...marketContexts.map((marketContext) => marketContext.market.asks), 138 | ]; 139 | 140 | const ts = getUnixTs(); 141 | const accountInfos = await getMultipleAccounts(connection, allAccounts); 142 | 143 | const cache = new MangoCache( 144 | accountInfos[0].publicKey, 145 | MangoCacheLayout.decode(accountInfos[0].accountInfo.data), 146 | ); 147 | 148 | const mangoAccount = new MangoAccount( 149 | accountInfos[1].publicKey, 150 | MangoAccountLayout.decode(accountInfos[1].accountInfo.data), 151 | ); 152 | const openOrdersAis = accountInfos.slice(2, 2 + inBasketOpenOrders.length); 153 | for (let i = 0; i < openOrdersAis.length; i++) { 154 | const ai = openOrdersAis[i]; 155 | const marketIndex = mangoAccount.spotOpenOrders.findIndex((soo) => 156 | soo.equals(ai.publicKey), 157 | ); 158 | mangoAccount.spotOpenOrdersAccounts[marketIndex] = 159 | OpenOrders.fromAccountInfo( 160 | ai.publicKey, 161 | ai.accountInfo, 162 | group.dexProgramId, 163 | ); 164 | } 165 | 166 | accountInfos 167 | .slice( 168 | 2 + inBasketOpenOrders.length, 169 | 2 + inBasketOpenOrders.length + marketContexts.length, 170 | ) 171 | .forEach((ai, i) => { 172 | marketContexts[i].bids = new BookSide( 173 | ai.publicKey, 174 | marketContexts[i].market, 175 | BookSideLayout.decode(ai.accountInfo.data), 176 | ); 177 | }); 178 | 179 | accountInfos 180 | .slice( 181 | 2 + inBasketOpenOrders.length + marketContexts.length, 182 | 2 + inBasketOpenOrders.length + 2 * marketContexts.length, 183 | ) 184 | .forEach((ai, i) => { 185 | marketContexts[i].lastBookUpdate = ts; 186 | marketContexts[i].asks = new BookSide( 187 | ai.publicKey, 188 | marketContexts[i].market, 189 | BookSideLayout.decode(ai.accountInfo.data), 190 | ); 191 | }); 192 | 193 | return { 194 | cache, 195 | mangoAccount, 196 | lastMangoAccountUpdate: ts, 197 | marketContexts, 198 | }; 199 | } 200 | 201 | async function initSeqEnfAccounts( 202 | client: MangoClient, 203 | marketContexts: MarketContext[], 204 | ) { 205 | // Initialize all the sequence accounts 206 | const seqAccInstrs = marketContexts.map((mc) => 207 | makeInitSequenceInstruction( 208 | mc.sequenceAccount, 209 | payer.publicKey, 210 | mc.sequenceAccountBump, 211 | mc.marketName, 212 | cluster, 213 | ), 214 | ); 215 | const seqAccTx = new Transaction(); 216 | seqAccTx.add(...seqAccInstrs); 217 | 218 | while (true) { 219 | try { 220 | const seqAccTxid = await client.sendTransaction(seqAccTx, payer, []); 221 | } catch (e) { 222 | console.log('failed to initialize sequence enforcer'); 223 | console.log(e); 224 | continue; 225 | } 226 | break; 227 | } 228 | } 229 | async function fullMarketMaker() { 230 | const connection = new Connection( 231 | process.env.ENDPOINT_URL || config.cluster_urls[cluster], 232 | 'processed' as Commitment, 233 | ); 234 | const client = new MangoClient(connection, mangoProgramId); 235 | // load group 236 | const mangoGroup = await client.getMangoGroup(mangoGroupKey); 237 | 238 | // load mangoAccount 239 | let mangoAccount: MangoAccount; 240 | if (params.mangoAccountName) { 241 | mangoAccount = await loadMangoAccountWithName( 242 | client, 243 | mangoGroup, 244 | payer, 245 | params.mangoAccountName, 246 | ); 247 | } else if (params.mangoAccountPubkey) { 248 | mangoAccount = await loadMangoAccountWithPubkey( 249 | client, 250 | mangoGroup, 251 | payer, 252 | new PublicKey(params.mangoAccountPubkey), 253 | ); 254 | } else { 255 | throw new Error( 256 | 'Please add mangoAccountName or mangoAccountPubkey to params file', 257 | ); 258 | } 259 | const perpMarkets = await Promise.all( 260 | Object.keys(params.assets).map((baseSymbol) => { 261 | const perpMarketConfig = getPerpMarketByBaseSymbol( 262 | groupIds, 263 | baseSymbol, 264 | ) as PerpMarketConfig; 265 | 266 | return client.getPerpMarket( 267 | perpMarketConfig.publicKey, 268 | perpMarketConfig.baseDecimals, 269 | perpMarketConfig.quoteDecimals, 270 | ); 271 | }), 272 | ); 273 | client.cancelAllPerpOrders(mangoGroup, perpMarkets, mangoAccount, payer); 274 | const marketContexts: MarketContext[] = []; 275 | for (const baseSymbol in params.assets) { 276 | const perpMarketConfig = getPerpMarketByBaseSymbol( 277 | groupIds, 278 | baseSymbol, 279 | ) as PerpMarketConfig; 280 | 281 | const [sequenceAccount, sequenceAccountBump] = findProgramAddressSync( 282 | [new Buffer(perpMarketConfig.name, 'utf-8'), payer.publicKey.toBytes()], 283 | seqEnforcerProgramIds[cluster], 284 | ); 285 | 286 | const perpMarket = perpMarkets.find((pm) => 287 | pm.publicKey.equals(perpMarketConfig.publicKey), 288 | ); 289 | if (perpMarket === undefined) { 290 | throw new Error('Cannot find perp market'); 291 | } 292 | marketContexts.push({ 293 | marketName: perpMarketConfig.name, 294 | params: params.assets[baseSymbol].perp, 295 | config: perpMarketConfig, 296 | market: perpMarket, 297 | marketIndex: perpMarketConfig.marketIndex, 298 | bids: await perpMarket.loadBids(connection), 299 | asks: await perpMarket.loadAsks(connection), 300 | lastBookUpdate: 0, 301 | aggBid: undefined, 302 | aggAsk: undefined, 303 | ftxMid: undefined, 304 | 305 | sequenceAccount, 306 | sequenceAccountBump, 307 | sentBidPrice: 0, 308 | sentAskPrice: 0, 309 | lastOrderUpdate: 0, 310 | }); 311 | } 312 | initSeqEnfAccounts(client, marketContexts); 313 | const symbolToContext = Object.fromEntries( 314 | marketContexts.map((mc) => [mc.marketName, mc]), 315 | ); 316 | const mdListeners: child_process.ChildProcess[] = listenersArray(params.processes, Object.keys(params.assets)).map((assetArray) => { 317 | const listener = child_process.fork(require.resolve('./listen'), [ assetArray.map((a) => `${a}-PERP`).join(',') ]); 318 | listener.on('message', (m: ListenerMessage) => { 319 | symbolToContext[m.marketName].aggBid = m.aggBid; 320 | symbolToContext[m.marketName].aggAsk = m.aggAsk; 321 | symbolToContext[m.marketName].ftxMid = m.ftxMid; 322 | }); 323 | return listener; 324 | }) 325 | 326 | 327 | const state = await loadAccountAndMarketState( 328 | connection, 329 | mangoGroup, 330 | mangoAccount, 331 | marketContexts, 332 | ); 333 | // listenState(client, state); 334 | const stateRefreshInterval = params.stateRefreshInterval || 500; 335 | listenAccountAndMarketState( 336 | connection, 337 | mangoGroup, 338 | state, 339 | stateRefreshInterval, 340 | mdListeners 341 | ); 342 | 343 | process.on('SIGINT', function () { 344 | console.log('Caught keyboard interrupt. Canceling orders'); 345 | control.isRunning = false; 346 | onExit(client, payer, mangoGroup, mangoAccount, marketContexts); 347 | }); 348 | 349 | while (control.isRunning) { 350 | try { 351 | mangoAccount = state.mangoAccount; 352 | 353 | // Calculate portfolio level values 354 | let pfQuoteValue: number | undefined = 0; 355 | for (const mc of marketContexts) { 356 | const pos = mangoAccount.getPerpPositionUi(mc.marketIndex, mc.market); 357 | const mid = mc.ftxMid; // TODO combine with other book 358 | if (mid) { 359 | pfQuoteValue += pos * mid; 360 | } else { 361 | pfQuoteValue = undefined; 362 | break; 363 | } 364 | } 365 | if (pfQuoteValue === undefined) continue; // don't proceed if we don't have pfQuoteValue yet 366 | let j = 0; 367 | let tx = new Transaction(); 368 | for (let i = 0; i < marketContexts.length; i++) { 369 | const instrSet = makeMarketUpdateInstructions( 370 | mangoGroup, 371 | state.cache, 372 | mangoAccount, 373 | marketContexts[i], 374 | pfQuoteValue, 375 | ); 376 | 377 | if (instrSet.length > 0) { 378 | instrSet.forEach((ix) => tx.add(ix)); 379 | j++; 380 | if (j === params.batch) { 381 | // sendDupTxs(client, tx, [], 10); 382 | client.sendTransaction(tx, payer, []); 383 | tx = new Transaction(); 384 | j = 0; 385 | } 386 | } 387 | } 388 | if (tx.instructions.length) { 389 | // sendDupTxs(client, tx, [], 10); 390 | client.sendTransaction(tx, payer, [], null); 391 | } 392 | } catch (e) { 393 | console.log(e); 394 | } finally { 395 | console.log( 396 | `${new Date().toUTCString()} sleeping for ${control.interval / 1000}s`, 397 | ); 398 | await sleep(control.interval); 399 | } 400 | } 401 | } 402 | 403 | /** 404 | * Periodically fetch the account and market state 405 | */ 406 | async function listenAccountAndMarketState( 407 | connection: Connection, 408 | group: MangoGroup, 409 | state: State, 410 | stateRefreshInterval: number, 411 | mdListeners: child_process.ChildProcess[] 412 | ) { 413 | while (control.isRunning) { 414 | try { 415 | const inBasketOpenOrders = state.mangoAccount 416 | .getOpenOrdersKeysInBasket() 417 | .filter((pk) => !pk.equals(zeroKey)); 418 | 419 | const allAccounts = [ 420 | group.mangoCache, 421 | state.mangoAccount.publicKey, 422 | ...inBasketOpenOrders, 423 | ...state.marketContexts.map( 424 | (marketContext) => marketContext.market.bids, 425 | ), 426 | ...state.marketContexts.map( 427 | (marketContext) => marketContext.market.asks, 428 | ), 429 | ]; 430 | 431 | const ts = getUnixTs(); 432 | const accountInfos = await getMultipleAccounts(connection, allAccounts); 433 | 434 | const cache = new MangoCache( 435 | accountInfos[0].publicKey, 436 | MangoCacheLayout.decode(accountInfos[0].accountInfo.data), 437 | ); 438 | 439 | const mangoAccount = new MangoAccount( 440 | accountInfos[1].publicKey, 441 | MangoAccountLayout.decode(accountInfos[1].accountInfo.data), 442 | ); 443 | const openOrdersAis = accountInfos.slice( 444 | 2, 445 | 2 + inBasketOpenOrders.length, 446 | ); 447 | for (let i = 0; i < openOrdersAis.length; i++) { 448 | const ai = openOrdersAis[i]; 449 | const marketIndex = mangoAccount.spotOpenOrders.findIndex((soo) => 450 | soo.equals(ai.publicKey), 451 | ); 452 | mangoAccount.spotOpenOrdersAccounts[marketIndex] = 453 | OpenOrders.fromAccountInfo( 454 | ai.publicKey, 455 | ai.accountInfo, 456 | group.dexProgramId, 457 | ); 458 | } 459 | 460 | accountInfos 461 | .slice( 462 | 2 + inBasketOpenOrders.length, 463 | 2 + inBasketOpenOrders.length + state.marketContexts.length, 464 | ) 465 | .forEach((ai, i) => { 466 | state.marketContexts[i].bids = new BookSide( 467 | ai.publicKey, 468 | state.marketContexts[i].market, 469 | BookSideLayout.decode(ai.accountInfo.data), 470 | ); 471 | }); 472 | 473 | accountInfos 474 | .slice( 475 | 2 + inBasketOpenOrders.length + state.marketContexts.length, 476 | 2 + inBasketOpenOrders.length + 2 * state.marketContexts.length, 477 | ) 478 | .forEach((ai, i) => { 479 | state.marketContexts[i].lastBookUpdate = ts; 480 | state.marketContexts[i].asks = new BookSide( 481 | ai.publicKey, 482 | state.marketContexts[i].market, 483 | BookSideLayout.decode(ai.accountInfo.data), 484 | ); 485 | }); 486 | 487 | state.mangoAccount = mangoAccount; 488 | state.cache = cache; 489 | state.lastMangoAccountUpdate = ts; 490 | 491 | const equity = mangoAccount.computeValue(group, cache).toNumber(); 492 | mdListeners.map((mdListener) => mdListener.send({ equity: equity })); 493 | } catch (e) { 494 | console.error( 495 | `${new Date().getUTCDate().toString()} failed when loading state`, 496 | e, 497 | ); 498 | } finally { 499 | await sleep(stateRefreshInterval); 500 | } 501 | } 502 | } 503 | 504 | function listenState( 505 | mangoClient: MangoClient, 506 | 507 | state: State, 508 | ) { 509 | const subscriptionId = mangoClient.connection.onAccountChange( 510 | state.mangoAccount.publicKey, 511 | (info) => { 512 | const decodedMangoAccount = MangoAccountLayout.decode(info?.data); 513 | state.mangoAccount = new MangoAccount( 514 | state.mangoAccount.publicKey, 515 | decodedMangoAccount, 516 | ); 517 | state.lastMangoAccountUpdate = getUnixTs(); 518 | }, 519 | 'processed', 520 | ); 521 | 522 | for (const mc of state.marketContexts) { 523 | mangoClient.connection.onAccountChange(mc.market.bids, (info) => { 524 | mc.bids = new BookSide( 525 | mc.market.bids, 526 | mc.market, 527 | BookSideLayout.decode(info.data), 528 | ); 529 | mc.lastBookUpdate = getUnixTs(); 530 | }); 531 | mangoClient.connection.onAccountChange(mc.market.asks, (info) => { 532 | mc.asks = new BookSide( 533 | mc.market.asks, 534 | mc.market, 535 | BookSideLayout.decode(info.data), 536 | ); 537 | mc.lastBookUpdate = getUnixTs(); 538 | }); 539 | } 540 | } 541 | 542 | async function sendDupTxs( 543 | client: MangoClient, 544 | transaction: Transaction, 545 | signers: Keypair[], 546 | n: number, 547 | ) { 548 | await client.signTransaction({ 549 | transaction, 550 | payer, 551 | signers, 552 | }); 553 | 554 | const rawTransaction = transaction.serialize(); 555 | const transactions: Promise[] = []; 556 | for (let i = 0; i < n; i++) { 557 | transactions.push( 558 | client.connection.sendRawTransaction(rawTransaction, { 559 | skipPreflight: true, 560 | }), 561 | ); 562 | } 563 | 564 | await Promise.all(transactions); 565 | } 566 | 567 | function makeMarketUpdateInstructions( 568 | group: MangoGroup, 569 | cache: MangoCache, 570 | mangoAccount: MangoAccount, 571 | marketContext: MarketContext, 572 | pfQuoteValue: number, 573 | ): TransactionInstruction[] { 574 | // Right now only uses the perp 575 | const marketIndex = marketContext.marketIndex; 576 | const market = marketContext.market; 577 | const bids = marketContext.bids; 578 | const asks = marketContext.asks; 579 | const equity = mangoAccount.computeValue(group, cache).toNumber(); 580 | const sizePerc = marketContext.params.sizePerc; 581 | const quoteSize = equity * sizePerc; 582 | const aggBid = marketContext.aggBid; 583 | const aggAsk = marketContext.aggAsk; 584 | if (aggBid === undefined || aggAsk === undefined) { 585 | // TODO deal with this better; probably cancel all if there are any orders open 586 | console.log(`${marketContext.marketName} No Agg Book`); 587 | return []; 588 | } 589 | 590 | const fairValue = (aggBid + aggAsk) / 2; 591 | const aggSpread = (aggAsk - aggBid) / fairValue; 592 | const perpAccount = mangoAccount.perpAccounts[marketIndex]; 593 | // TODO look at event queue as well for unprocessed fills 594 | const basePos = perpAccount.getBasePositionUi(market); 595 | 596 | const leanCoeff = marketContext.params.leanCoeff; 597 | const charge = (marketContext.params.charge || 0.0015) + aggSpread / 2; 598 | const bias = marketContext.params.bias; 599 | const requoteThresh = marketContext.params.requoteThresh; 600 | const takeSpammers = marketContext.params.takeSpammers; 601 | const spammerCharge = marketContext.params.spammerCharge; 602 | const pfQuoteLeanCoeff = params.pfQuoteLeanCoeff || 0.001; // how much to move if pf pos is equal to equity 603 | const size = quoteSize / fairValue; 604 | const lean = (-leanCoeff * basePos) / size; 605 | const pfQuoteLean = (pfQuoteValue / equity) * -pfQuoteLeanCoeff; 606 | const bidPrice = fairValue * (1 - charge + lean + bias + pfQuoteLean); 607 | const askPrice = fairValue * (1 + charge + lean + bias + pfQuoteLean); 608 | // TODO volatility adjustment 609 | 610 | const [modelBidPrice, nativeBidSize] = market.uiToNativePriceQuantity( 611 | bidPrice, 612 | size, 613 | ); 614 | const [modelAskPrice, nativeAskSize] = market.uiToNativePriceQuantity( 615 | askPrice, 616 | size, 617 | ); 618 | 619 | const bestBid = bids.getBest(); 620 | const bestAsk = asks.getBest(); 621 | const bookAdjBid = 622 | bestAsk !== undefined 623 | ? BN.min(bestAsk.priceLots.sub(ONE_BN), modelBidPrice) 624 | : modelBidPrice; 625 | const bookAdjAsk = 626 | bestBid !== undefined 627 | ? BN.max(bestBid.priceLots.add(ONE_BN), modelAskPrice) 628 | : modelAskPrice; 629 | 630 | // TODO use order book to requote if size has changed 631 | 632 | let moveOrders = false; 633 | if (marketContext.lastBookUpdate >= marketContext.lastOrderUpdate + 2) { 634 | // if mango book was updated recently, then MangoAccount was also updated 635 | const openOrders = mangoAccount 636 | .getPerpOpenOrders() 637 | .filter((o) => o.marketIndex === marketIndex); 638 | moveOrders = openOrders.length < 2 || openOrders.length > 2; 639 | for (const o of openOrders) { 640 | const refPrice = o.side === 'buy' ? bookAdjBid : bookAdjAsk; 641 | moveOrders = 642 | moveOrders || 643 | Math.abs(o.price.toNumber() / refPrice.toNumber() - 1) > requoteThresh; 644 | } 645 | } else { 646 | // If order was updated before MangoAccount, then assume that sent order already executed 647 | moveOrders = 648 | moveOrders || 649 | Math.abs(marketContext.sentBidPrice / bookAdjBid.toNumber() - 1) > 650 | requoteThresh || 651 | Math.abs(marketContext.sentAskPrice / bookAdjAsk.toNumber() - 1) > 652 | requoteThresh; 653 | } 654 | 655 | // Start building the transaction 656 | const instructions: TransactionInstruction[] = [ 657 | makeCheckAndSetSequenceNumberInstruction( 658 | marketContext.sequenceAccount, 659 | payer.publicKey, 660 | Math.round(getUnixTs() * 1000), 661 | cluster, 662 | ), 663 | ]; 664 | 665 | /* 666 | Clear 1 lot size orders at the top of book that bad people use to manipulate the price 667 | */ 668 | if ( 669 | takeSpammers && 670 | bestBid !== undefined && 671 | bestBid.sizeLots.eq(ONE_BN) && 672 | bestBid.priceLots.toNumber() / modelAskPrice.toNumber() - 1 > 673 | spammerCharge * charge + 0.0005 674 | ) { 675 | console.log(`${marketContext.marketName} taking best bid spammer`); 676 | const takerSell = makePlacePerpOrder2Instruction( 677 | mangoProgramId, 678 | group.publicKey, 679 | mangoAccount.publicKey, 680 | payer.publicKey, 681 | cache.publicKey, 682 | market.publicKey, 683 | market.bids, 684 | market.asks, 685 | market.eventQueue, 686 | mangoAccount.getOpenOrdersKeysInBasketPacked(), 687 | bestBid.priceLots, 688 | ONE_BN, 689 | I64_MAX_BN, 690 | new BN(Date.now()), 691 | 'sell', 692 | new BN(20), 693 | 'ioc', 694 | ); 695 | instructions.push(takerSell); 696 | } else if ( 697 | takeSpammers && 698 | bestAsk !== undefined && 699 | bestAsk.sizeLots.eq(ONE_BN) && 700 | modelBidPrice.toNumber() / bestAsk.priceLots.toNumber() - 1 > 701 | spammerCharge * charge + 0.0005 702 | ) { 703 | console.log(`${marketContext.marketName} taking best ask spammer`); 704 | const takerBuy = makePlacePerpOrder2Instruction( 705 | mangoProgramId, 706 | group.publicKey, 707 | mangoAccount.publicKey, 708 | payer.publicKey, 709 | cache.publicKey, 710 | market.publicKey, 711 | market.bids, 712 | market.asks, 713 | market.eventQueue, 714 | mangoAccount.getOpenOrdersKeysInBasketPacked(), 715 | bestAsk.priceLots, 716 | ONE_BN, 717 | I64_MAX_BN, 718 | new BN(Date.now()), 719 | 'buy', 720 | new BN(20), 721 | 'ioc', 722 | ); 723 | instructions.push(takerBuy); 724 | } 725 | if (moveOrders) { 726 | // cancel all, requote 727 | const cancelAllInstr = makeCancelAllPerpOrdersInstruction( 728 | mangoProgramId, 729 | group.publicKey, 730 | mangoAccount.publicKey, 731 | payer.publicKey, 732 | market.publicKey, 733 | market.bids, 734 | market.asks, 735 | new BN(20), 736 | ); 737 | 738 | const expiryTimestamp = 739 | params.tif !== undefined 740 | ? new BN((Date.now() / 1000) + params.tif) 741 | : new BN(0); 742 | 743 | const placeBidInstr = makePlacePerpOrder2Instruction( 744 | mangoProgramId, 745 | group.publicKey, 746 | mangoAccount.publicKey, 747 | payer.publicKey, 748 | cache.publicKey, 749 | market.publicKey, 750 | market.bids, 751 | market.asks, 752 | market.eventQueue, 753 | mangoAccount.getOpenOrdersKeysInBasketPacked(), 754 | bookAdjBid, 755 | nativeBidSize, 756 | I64_MAX_BN, 757 | new BN(Date.now()), 758 | 'buy', 759 | new BN(20), 760 | 'postOnlySlide', 761 | false, 762 | undefined, 763 | expiryTimestamp 764 | ); 765 | 766 | const placeAskInstr = makePlacePerpOrder2Instruction( 767 | mangoProgramId, 768 | group.publicKey, 769 | mangoAccount.publicKey, 770 | payer.publicKey, 771 | cache.publicKey, 772 | market.publicKey, 773 | market.bids, 774 | market.asks, 775 | market.eventQueue, 776 | mangoAccount.getOpenOrdersKeysInBasketPacked(), 777 | bookAdjAsk, 778 | nativeAskSize, 779 | I64_MAX_BN, 780 | new BN(Date.now()), 781 | 'sell', 782 | new BN(20), 783 | 'postOnlySlide', 784 | false, 785 | undefined, 786 | expiryTimestamp 787 | ); 788 | instructions.push(cancelAllInstr); 789 | const posAsTradeSizes = basePos / size; 790 | if (posAsTradeSizes < 15) { 791 | instructions.push(placeBidInstr); 792 | } 793 | if (posAsTradeSizes > -15) { 794 | instructions.push(placeAskInstr); 795 | } 796 | console.log( 797 | `${marketContext.marketName} Requoting sentBidPx: ${ 798 | marketContext.sentBidPrice 799 | } newBidPx: ${bookAdjBid} sentAskPx: ${ 800 | marketContext.sentAskPrice 801 | } newAskPx: ${bookAdjAsk} pfLean: ${(pfQuoteLean * 10000).toFixed( 802 | 1, 803 | )} aggBid: ${aggBid} addAsk: ${aggAsk}`, 804 | ); 805 | marketContext.sentBidPrice = bookAdjBid.toNumber(); 806 | marketContext.sentAskPrice = bookAdjAsk.toNumber(); 807 | marketContext.lastOrderUpdate = getUnixTs(); 808 | } else { 809 | // console.log( 810 | // `${marketContext.marketName} Not requoting. No need to move orders`, 811 | // ); 812 | } 813 | 814 | // if instruction is only the sequence enforcement, then just send empty 815 | if (instructions.length === 1) { 816 | return []; 817 | } else { 818 | return instructions; 819 | } 820 | } 821 | 822 | async function onExit( 823 | client: MangoClient, 824 | payer: Payer, 825 | group: MangoGroup, 826 | mangoAccount: MangoAccount, 827 | marketContexts: MarketContext[], 828 | ) { 829 | await sleep(control.interval); 830 | mangoAccount = await client.getMangoAccount( 831 | mangoAccount.publicKey, 832 | group.dexProgramId, 833 | ); 834 | let tx = new Transaction(); 835 | const txProms: any[] = []; 836 | for (let i = 0; i < marketContexts.length; i++) { 837 | const mc = marketContexts[i]; 838 | const cancelAllInstr = makeCancelAllPerpOrdersInstruction( 839 | mangoProgramId, 840 | group.publicKey, 841 | mangoAccount.publicKey, 842 | payer.publicKey!, 843 | mc.market.publicKey, 844 | mc.market.bids, 845 | mc.market.asks, 846 | new BN(20), 847 | ); 848 | tx.add(cancelAllInstr); 849 | if (tx.instructions.length === params.batch) { 850 | txProms.push(client.sendTransaction(tx, payer, [])); 851 | tx = new Transaction(); 852 | } 853 | } 854 | 855 | if (tx.instructions.length) { 856 | txProms.push(client.sendTransaction(tx, payer, [])); 857 | } 858 | const txids = await Promise.all(txProms); 859 | txids.forEach((txid) => { 860 | console.log(`cancel successful: ${txid.toString()}`); 861 | }); 862 | process.exit(); 863 | } 864 | 865 | function startMarketMaker() { 866 | if (control.isRunning) { 867 | fullMarketMaker().finally(startMarketMaker); 868 | } 869 | } 870 | 871 | process.on('unhandledRejection', function (err, promise) { 872 | console.error( 873 | 'Unhandled rejection (promise: ', 874 | promise, 875 | ', reason: ', 876 | err, 877 | ').', 878 | ); 879 | }); 880 | 881 | startMarketMaker(); 882 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@7.12.11": 6 | version "7.12.11" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" 8 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== 9 | dependencies: 10 | "@babel/highlight" "^7.10.4" 11 | 12 | "@babel/helper-validator-identifier@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 | 17 | "@babel/highlight@^7.10.4": 18 | version "7.17.12" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" 20 | integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.16.7" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@babel/runtime@^7.10.5": 27 | version "7.18.3" 28 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" 29 | integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== 30 | dependencies: 31 | regenerator-runtime "^0.13.4" 32 | 33 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": 34 | version "7.18.6" 35 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.6.tgz#6a1ef59f838debd670421f8c7f2cbb8da9751580" 36 | integrity sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ== 37 | dependencies: 38 | regenerator-runtime "^0.13.4" 39 | 40 | "@blockworks-foundation/mango-client@^3.6.2": 41 | version "3.6.7" 42 | resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.6.7.tgz#ecc59bfc41af20cb0699f588e5477634b40cbbd7" 43 | integrity sha512-AKPFzkDArQ4w1eO9xYQPwXoxuzpKNKWyryDmtNLm3YSgzpNQbKAfD6VH9Hxw3m3Kcq5YzYH9pIHSae+qFgOTvw== 44 | dependencies: 45 | "@project-serum/anchor" "^0.21.0" 46 | "@project-serum/serum" "0.13.55" 47 | "@project-serum/sol-wallet-adapter" "^0.2.0" 48 | "@solana/spl-token" "^0.1.6" 49 | "@solana/web3.js" "^1.43.5" 50 | big.js "^6.1.1" 51 | bn.js "^5.1.0" 52 | buffer-layout "^1.2.1" 53 | cross-fetch "^3.1.5" 54 | dotenv "^10.0.0" 55 | toformat "^2.0.0" 56 | yargs "^17.0.1" 57 | 58 | "@cspotcode/source-map-support@^0.8.0": 59 | version "0.8.1" 60 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 61 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 62 | dependencies: 63 | "@jridgewell/trace-mapping" "0.3.9" 64 | 65 | "@eslint/eslintrc@^0.4.3": 66 | version "0.4.3" 67 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" 68 | integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== 69 | dependencies: 70 | ajv "^6.12.4" 71 | debug "^4.1.1" 72 | espree "^7.3.0" 73 | globals "^13.9.0" 74 | ignore "^4.0.6" 75 | import-fresh "^3.2.1" 76 | js-yaml "^3.13.1" 77 | minimatch "^3.0.4" 78 | strip-json-comments "^3.1.1" 79 | 80 | "@ethersproject/bytes@^5.6.1": 81 | version "5.6.1" 82 | resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.6.1.tgz#24f916e411f82a8a60412344bf4a813b917eefe7" 83 | integrity sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g== 84 | dependencies: 85 | "@ethersproject/logger" "^5.6.0" 86 | 87 | "@ethersproject/logger@^5.6.0": 88 | version "5.6.0" 89 | resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.6.0.tgz#d7db1bfcc22fd2e4ab574cba0bb6ad779a9a3e7a" 90 | integrity sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg== 91 | 92 | "@ethersproject/sha2@^5.5.0": 93 | version "5.6.1" 94 | resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.6.1.tgz#211f14d3f5da5301c8972a8827770b6fd3e51656" 95 | integrity sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g== 96 | dependencies: 97 | "@ethersproject/bytes" "^5.6.1" 98 | "@ethersproject/logger" "^5.6.0" 99 | hash.js "1.1.7" 100 | 101 | "@humanwhocodes/config-array@^0.5.0": 102 | version "0.5.0" 103 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" 104 | integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== 105 | dependencies: 106 | "@humanwhocodes/object-schema" "^1.2.0" 107 | debug "^4.1.1" 108 | minimatch "^3.0.4" 109 | 110 | "@humanwhocodes/object-schema@^1.2.0": 111 | version "1.2.1" 112 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 113 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 114 | 115 | "@jest/types@^26.6.2": 116 | version "26.6.2" 117 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" 118 | integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== 119 | dependencies: 120 | "@types/istanbul-lib-coverage" "^2.0.0" 121 | "@types/istanbul-reports" "^3.0.0" 122 | "@types/node" "*" 123 | "@types/yargs" "^15.0.0" 124 | chalk "^4.0.0" 125 | 126 | "@jridgewell/resolve-uri@^3.0.3": 127 | version "3.0.7" 128 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" 129 | integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== 130 | 131 | "@jridgewell/sourcemap-codec@^1.4.10": 132 | version "1.4.13" 133 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" 134 | integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== 135 | 136 | "@jridgewell/trace-mapping@0.3.9": 137 | version "0.3.9" 138 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 139 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 140 | dependencies: 141 | "@jridgewell/resolve-uri" "^3.0.3" 142 | "@jridgewell/sourcemap-codec" "^1.4.10" 143 | 144 | "@nodelib/fs.scandir@2.1.5": 145 | version "2.1.5" 146 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 147 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 148 | dependencies: 149 | "@nodelib/fs.stat" "2.0.5" 150 | run-parallel "^1.1.9" 151 | 152 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 153 | version "2.0.5" 154 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 155 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 156 | 157 | "@nodelib/fs.walk@^1.2.3": 158 | version "1.2.8" 159 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 160 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 161 | dependencies: 162 | "@nodelib/fs.scandir" "2.1.5" 163 | fastq "^1.6.0" 164 | 165 | "@project-serum/anchor@^0.11.1": 166 | version "0.11.1" 167 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.11.1.tgz#155bff2c70652eafdcfd5559c81a83bb19cec9ff" 168 | integrity sha512-oIdm4vTJkUy6GmE6JgqDAuQPKI7XM4TPJkjtoIzp69RZe0iAD9JP2XHx7lV1jLdYXeYHqDXfBt3zcq7W91K6PA== 169 | dependencies: 170 | "@project-serum/borsh" "^0.2.2" 171 | "@solana/web3.js" "^1.17.0" 172 | base64-js "^1.5.1" 173 | bn.js "^5.1.2" 174 | bs58 "^4.0.1" 175 | buffer-layout "^1.2.0" 176 | camelcase "^5.3.1" 177 | crypto-hash "^1.3.0" 178 | eventemitter3 "^4.0.7" 179 | find "^0.3.0" 180 | js-sha256 "^0.9.0" 181 | pako "^2.0.3" 182 | snake-case "^3.0.4" 183 | toml "^3.0.0" 184 | 185 | "@project-serum/anchor@^0.21.0": 186 | version "0.21.0" 187 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.21.0.tgz#ad5fb33744991ec1900cdb2fd22707c908b12b5f" 188 | integrity sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA== 189 | dependencies: 190 | "@project-serum/borsh" "^0.2.4" 191 | "@solana/web3.js" "^1.17.0" 192 | base64-js "^1.5.1" 193 | bn.js "^5.1.2" 194 | bs58 "^4.0.1" 195 | buffer-layout "^1.2.2" 196 | camelcase "^5.3.1" 197 | cross-fetch "^3.1.5" 198 | crypto-hash "^1.3.0" 199 | eventemitter3 "^4.0.7" 200 | find "^0.3.0" 201 | js-sha256 "^0.9.0" 202 | pako "^2.0.3" 203 | snake-case "^3.0.4" 204 | toml "^3.0.0" 205 | 206 | "@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.4": 207 | version "0.2.5" 208 | resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" 209 | integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== 210 | dependencies: 211 | bn.js "^5.1.2" 212 | buffer-layout "^1.2.0" 213 | 214 | "@project-serum/serum@0.13.55": 215 | version "0.13.55" 216 | resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.55.tgz#2ac44fe7b07651274eb57ac54ea9325789df5dd7" 217 | integrity sha512-SPQ4NsuNbBJO3mLGnTYbjt47WCXoNIcW2C9xv0gNXyG62dxgONsAEEgErKv1gT34hWCMPsXFSpatnX6ppriq7w== 218 | dependencies: 219 | "@project-serum/anchor" "^0.11.1" 220 | "@solana/spl-token" "^0.1.6" 221 | "@solana/web3.js" "^1.21.0" 222 | bn.js "^5.1.2" 223 | buffer-layout "^1.2.0" 224 | 225 | "@project-serum/sol-wallet-adapter@^0.2.0": 226 | version "0.2.6" 227 | resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz#b4cd25a566294354427c97c26d716112b91a0107" 228 | integrity sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g== 229 | dependencies: 230 | bs58 "^4.0.1" 231 | eventemitter3 "^4.0.7" 232 | 233 | "@sindresorhus/is@^4.0.0": 234 | version "4.6.0" 235 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" 236 | integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== 237 | 238 | "@solana/buffer-layout@^4.0.0": 239 | version "4.0.0" 240 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734" 241 | integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== 242 | dependencies: 243 | buffer "~6.0.3" 244 | 245 | "@solana/spl-token@^0.1.6": 246 | version "0.1.8" 247 | resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" 248 | integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ== 249 | dependencies: 250 | "@babel/runtime" "^7.10.5" 251 | "@solana/web3.js" "^1.21.0" 252 | bn.js "^5.1.0" 253 | buffer "6.0.3" 254 | buffer-layout "^1.2.0" 255 | dotenv "10.0.0" 256 | 257 | "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0": 258 | version "1.47.3" 259 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.47.3.tgz#ec13f2cf4f9f54cc4fbd26d20be1e026c6e2279c" 260 | integrity sha512-TQJulaN/+b0xXq5EhQAYFwVyOORxSyVJn1EiXupClZm8DY7f9EeUG6vl0FzSAgwEAwXKsgK3sVs/3px2e7H7dQ== 261 | dependencies: 262 | "@babel/runtime" "^7.12.5" 263 | "@ethersproject/sha2" "^5.5.0" 264 | "@solana/buffer-layout" "^4.0.0" 265 | bigint-buffer "^1.1.5" 266 | bn.js "^5.0.0" 267 | borsh "^0.7.0" 268 | bs58 "^4.0.1" 269 | buffer "6.0.1" 270 | fast-stable-stringify "^1.0.0" 271 | jayson "^3.4.4" 272 | js-sha3 "^0.8.0" 273 | node-fetch "2" 274 | rpc-websockets "^7.5.0" 275 | secp256k1 "^4.0.2" 276 | superstruct "^0.14.2" 277 | tweetnacl "^1.0.0" 278 | 279 | "@solana/web3.js@^1.43.5": 280 | version "1.44.2" 281 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.44.2.tgz#5303efd94a7f2d6054a1483a4b4db4a26eb2a392" 282 | integrity sha512-DvrJMoKonLuaX0/KyyJXcP/+w+9q8mve4gN3hC2Ptg51K/Gi1/cx6oQN2lbRZb4wYPBd2s2GDAJAJUAwZGsEug== 283 | dependencies: 284 | "@babel/runtime" "^7.12.5" 285 | "@ethersproject/sha2" "^5.5.0" 286 | "@solana/buffer-layout" "^4.0.0" 287 | bigint-buffer "^1.1.5" 288 | bn.js "^5.0.0" 289 | borsh "^0.7.0" 290 | bs58 "^4.0.1" 291 | buffer "6.0.1" 292 | fast-stable-stringify "^1.0.0" 293 | jayson "^3.4.4" 294 | js-sha3 "^0.8.0" 295 | node-fetch "2" 296 | rpc-websockets "^7.4.2" 297 | secp256k1 "^4.0.2" 298 | superstruct "^0.14.2" 299 | tweetnacl "^1.0.0" 300 | 301 | "@szmarczak/http-timer@^4.0.5": 302 | version "4.0.6" 303 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" 304 | integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== 305 | dependencies: 306 | defer-to-connect "^2.0.0" 307 | 308 | "@tsconfig/node10@^1.0.7": 309 | version "1.0.9" 310 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" 311 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== 312 | 313 | "@tsconfig/node12@^1.0.7": 314 | version "1.0.11" 315 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 316 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 317 | 318 | "@tsconfig/node14@^1.0.0": 319 | version "1.0.3" 320 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 321 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 322 | 323 | "@tsconfig/node16@^1.0.2": 324 | version "1.0.3" 325 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" 326 | integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== 327 | 328 | "@tsconfig/recommended@^1.0.1": 329 | version "1.0.1" 330 | resolved "https://registry.yarnpkg.com/@tsconfig/recommended/-/recommended-1.0.1.tgz#7619bad397e06ead1c5182926c944e0ca6177f52" 331 | integrity sha512-2xN+iGTbPBEzGSnVp/Hd64vKJCJWxsi9gfs88x4PPMyEjHJoA3o5BY9r5OLPHIZU2pAQxkSAsJFqn6itClP8mQ== 332 | 333 | "@types/big.js@^6.1.1": 334 | version "6.1.3" 335 | resolved "https://registry.yarnpkg.com/@types/big.js/-/big.js-6.1.3.tgz#c008dec4dae24c7a338ebb4521c46e9609020807" 336 | integrity sha512-fHh2h1cFlvGP0kFCqoAsnuQoM0n3xHB6HxgZvELt7dji+BtK/j938MRL0nG5AA45EgibuFcPjgLlkqfUPCyoKw== 337 | 338 | "@types/bintrees@^1.0.3": 339 | version "1.0.3" 340 | resolved "https://registry.yarnpkg.com/@types/bintrees/-/bintrees-1.0.3.tgz#44723d00ec44cc9a6607efd93f6d9837b26d8c48" 341 | integrity sha512-A/LCJoFzbF6TIfRZ6IzWHaxthLSGj2qiOXiIWn4xjjbaZIZ8+97SUzgIU8E/n1v2ozc2aDGdzwkA2hfXozgKNg== 342 | 343 | "@types/bn.js@^5.1.0": 344 | version "5.1.0" 345 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" 346 | integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== 347 | dependencies: 348 | "@types/node" "*" 349 | 350 | "@types/cacheable-request@^6.0.1": 351 | version "6.0.2" 352 | resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" 353 | integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== 354 | dependencies: 355 | "@types/http-cache-semantics" "*" 356 | "@types/keyv" "*" 357 | "@types/node" "*" 358 | "@types/responselike" "*" 359 | 360 | "@types/chai@^4.2.14": 361 | version "4.3.1" 362 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" 363 | integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== 364 | 365 | "@types/connect@^3.4.33": 366 | version "3.4.35" 367 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 368 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 369 | dependencies: 370 | "@types/node" "*" 371 | 372 | "@types/express-serve-static-core@^4.17.9": 373 | version "4.17.29" 374 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" 375 | integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== 376 | dependencies: 377 | "@types/node" "*" 378 | "@types/qs" "*" 379 | "@types/range-parser" "*" 380 | 381 | "@types/http-cache-semantics@*": 382 | version "4.0.1" 383 | resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" 384 | integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== 385 | 386 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": 387 | version "2.0.4" 388 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" 389 | integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== 390 | 391 | "@types/istanbul-lib-report@*": 392 | version "3.0.0" 393 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" 394 | integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== 395 | dependencies: 396 | "@types/istanbul-lib-coverage" "*" 397 | 398 | "@types/istanbul-reports@^3.0.0": 399 | version "3.0.1" 400 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" 401 | integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== 402 | dependencies: 403 | "@types/istanbul-lib-report" "*" 404 | 405 | "@types/jest@^26.0.9": 406 | version "26.0.24" 407 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" 408 | integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== 409 | dependencies: 410 | jest-diff "^26.0.0" 411 | pretty-format "^26.0.0" 412 | 413 | "@types/json-buffer@~3.0.0": 414 | version "3.0.0" 415 | resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" 416 | integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== 417 | 418 | "@types/json-schema@^7.0.7": 419 | version "7.0.11" 420 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 421 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 422 | 423 | "@types/keyv@*": 424 | version "3.1.4" 425 | resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" 426 | integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== 427 | dependencies: 428 | "@types/node" "*" 429 | 430 | "@types/lodash@^4.14.159": 431 | version "4.14.182" 432 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.182.tgz#05301a4d5e62963227eaafe0ce04dd77c54ea5c2" 433 | integrity sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q== 434 | 435 | "@types/mocha@^8.2.0": 436 | version "8.2.3" 437 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" 438 | integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== 439 | 440 | "@types/node@*": 441 | version "18.0.3" 442 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.3.tgz#463fc47f13ec0688a33aec75d078a0541a447199" 443 | integrity sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ== 444 | 445 | "@types/node@^12.12.54": 446 | version "12.20.55" 447 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" 448 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== 449 | 450 | "@types/node@^15.12.4": 451 | version "15.14.9" 452 | resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" 453 | integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== 454 | 455 | "@types/qs@*": 456 | version "6.9.7" 457 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 458 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 459 | 460 | "@types/range-parser@*": 461 | version "1.2.4" 462 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 463 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 464 | 465 | "@types/responselike@*", "@types/responselike@^1.0.0": 466 | version "1.0.0" 467 | resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" 468 | integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== 469 | dependencies: 470 | "@types/node" "*" 471 | 472 | "@types/ws@^7.4.4": 473 | version "7.4.7" 474 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" 475 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== 476 | dependencies: 477 | "@types/node" "*" 478 | 479 | "@types/yargs-parser@*": 480 | version "21.0.0" 481 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" 482 | integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== 483 | 484 | "@types/yargs@^15.0.0": 485 | version "15.0.14" 486 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" 487 | integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== 488 | dependencies: 489 | "@types/yargs-parser" "*" 490 | 491 | "@types/yargs@^17.0.8": 492 | version "17.0.10" 493 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.10.tgz#591522fce85d8739bca7b8bb90d048e4478d186a" 494 | integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== 495 | dependencies: 496 | "@types/yargs-parser" "*" 497 | 498 | "@typescript-eslint/eslint-plugin@^4.14.2": 499 | version "4.33.0" 500 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" 501 | integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== 502 | dependencies: 503 | "@typescript-eslint/experimental-utils" "4.33.0" 504 | "@typescript-eslint/scope-manager" "4.33.0" 505 | debug "^4.3.1" 506 | functional-red-black-tree "^1.0.1" 507 | ignore "^5.1.8" 508 | regexpp "^3.1.0" 509 | semver "^7.3.5" 510 | tsutils "^3.21.0" 511 | 512 | "@typescript-eslint/experimental-utils@4.33.0": 513 | version "4.33.0" 514 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" 515 | integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== 516 | dependencies: 517 | "@types/json-schema" "^7.0.7" 518 | "@typescript-eslint/scope-manager" "4.33.0" 519 | "@typescript-eslint/types" "4.33.0" 520 | "@typescript-eslint/typescript-estree" "4.33.0" 521 | eslint-scope "^5.1.1" 522 | eslint-utils "^3.0.0" 523 | 524 | "@typescript-eslint/parser@^4.14.2": 525 | version "4.33.0" 526 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" 527 | integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== 528 | dependencies: 529 | "@typescript-eslint/scope-manager" "4.33.0" 530 | "@typescript-eslint/types" "4.33.0" 531 | "@typescript-eslint/typescript-estree" "4.33.0" 532 | debug "^4.3.1" 533 | 534 | "@typescript-eslint/scope-manager@4.33.0": 535 | version "4.33.0" 536 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" 537 | integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== 538 | dependencies: 539 | "@typescript-eslint/types" "4.33.0" 540 | "@typescript-eslint/visitor-keys" "4.33.0" 541 | 542 | "@typescript-eslint/types@4.33.0": 543 | version "4.33.0" 544 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" 545 | integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== 546 | 547 | "@typescript-eslint/typescript-estree@4.33.0": 548 | version "4.33.0" 549 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" 550 | integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== 551 | dependencies: 552 | "@typescript-eslint/types" "4.33.0" 553 | "@typescript-eslint/visitor-keys" "4.33.0" 554 | debug "^4.3.1" 555 | globby "^11.0.3" 556 | is-glob "^4.0.1" 557 | semver "^7.3.5" 558 | tsutils "^3.21.0" 559 | 560 | "@typescript-eslint/visitor-keys@4.33.0": 561 | version "4.33.0" 562 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" 563 | integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== 564 | dependencies: 565 | "@typescript-eslint/types" "4.33.0" 566 | eslint-visitor-keys "^2.0.0" 567 | 568 | "@ungap/promise-all-settled@1.1.2": 569 | version "1.1.2" 570 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" 571 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== 572 | 573 | JSONStream@^1.3.5: 574 | version "1.3.5" 575 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 576 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 577 | dependencies: 578 | jsonparse "^1.2.0" 579 | through ">=2.2.7 <3" 580 | 581 | acorn-jsx@^5.3.1: 582 | version "5.3.2" 583 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 584 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 585 | 586 | acorn-walk@^8.1.1: 587 | version "8.2.0" 588 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 589 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 590 | 591 | acorn@^7.4.0: 592 | version "7.4.1" 593 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" 594 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== 595 | 596 | acorn@^8.4.1: 597 | version "8.7.1" 598 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" 599 | integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== 600 | 601 | agent-base@6: 602 | version "6.0.2" 603 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 604 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 605 | dependencies: 606 | debug "4" 607 | 608 | aggregate-error@^3.0.0: 609 | version "3.1.0" 610 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" 611 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== 612 | dependencies: 613 | clean-stack "^2.0.0" 614 | indent-string "^4.0.0" 615 | 616 | ajv@^6.10.0, ajv@^6.12.4: 617 | version "6.12.6" 618 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 619 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 620 | dependencies: 621 | fast-deep-equal "^3.1.1" 622 | fast-json-stable-stringify "^2.0.0" 623 | json-schema-traverse "^0.4.1" 624 | uri-js "^4.2.2" 625 | 626 | ajv@^8.0.1: 627 | version "8.11.0" 628 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" 629 | integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== 630 | dependencies: 631 | fast-deep-equal "^3.1.1" 632 | json-schema-traverse "^1.0.0" 633 | require-from-string "^2.0.2" 634 | uri-js "^4.2.2" 635 | 636 | ansi-colors@4.1.1: 637 | version "4.1.1" 638 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" 639 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== 640 | 641 | ansi-colors@^4.1.1: 642 | version "4.1.3" 643 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" 644 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== 645 | 646 | ansi-regex@^3.0.0: 647 | version "3.0.1" 648 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" 649 | integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== 650 | 651 | ansi-regex@^5.0.0, ansi-regex@^5.0.1: 652 | version "5.0.1" 653 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 654 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 655 | 656 | ansi-styles@^3.2.1: 657 | version "3.2.1" 658 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 659 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 660 | dependencies: 661 | color-convert "^1.9.0" 662 | 663 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 664 | version "4.3.0" 665 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 666 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 667 | dependencies: 668 | color-convert "^2.0.1" 669 | 670 | anymatch@~3.1.1: 671 | version "3.1.2" 672 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 673 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 674 | dependencies: 675 | normalize-path "^3.0.0" 676 | picomatch "^2.0.4" 677 | 678 | arg@^4.1.0: 679 | version "4.1.3" 680 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 681 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 682 | 683 | argparse@^1.0.7: 684 | version "1.0.10" 685 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 686 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 687 | dependencies: 688 | sprintf-js "~1.0.2" 689 | 690 | argparse@^2.0.1: 691 | version "2.0.1" 692 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 693 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 694 | 695 | array-union@^2.1.0: 696 | version "2.1.0" 697 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 698 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 699 | 700 | assertion-error@^1.1.0: 701 | version "1.1.0" 702 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" 703 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== 704 | 705 | astral-regex@^2.0.0: 706 | version "2.0.0" 707 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" 708 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== 709 | 710 | axios@^0.21.1: 711 | version "0.21.4" 712 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" 713 | integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== 714 | dependencies: 715 | follow-redirects "^1.14.0" 716 | 717 | balanced-match@^1.0.0: 718 | version "1.0.2" 719 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 720 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 721 | 722 | base-x@^3.0.2: 723 | version "3.0.9" 724 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" 725 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== 726 | dependencies: 727 | safe-buffer "^5.0.1" 728 | 729 | base64-js@^1.3.1, base64-js@^1.5.1: 730 | version "1.5.1" 731 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 732 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 733 | 734 | big.js@^6.1.1: 735 | version "6.2.0" 736 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.0.tgz#39c60822aecb0f34a1d79a90fe9908a0ddf45e1d" 737 | integrity sha512-paIKvJiAaOYdLt6MfnvxkDo64lTOV257XYJyX3oJnJQocIclUn+48k6ZerH/c5FxWE6DGJu1TKDYis7tqHg9kg== 738 | 739 | bigint-buffer@^1.1.5: 740 | version "1.1.5" 741 | resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" 742 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== 743 | dependencies: 744 | bindings "^1.3.0" 745 | 746 | binary-extensions@^2.0.0: 747 | version "2.2.0" 748 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 749 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 750 | 751 | bindings@^1.3.0: 752 | version "1.5.0" 753 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" 754 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== 755 | dependencies: 756 | file-uri-to-path "1.0.0" 757 | 758 | bintrees@^1.0.2: 759 | version "1.0.2" 760 | resolved "https://registry.yarnpkg.com/bintrees/-/bintrees-1.0.2.tgz#49f896d6e858a4a499df85c38fb399b9aff840f8" 761 | integrity sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== 762 | 763 | bn.js@^4.11.9: 764 | version "4.12.0" 765 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" 766 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== 767 | 768 | bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0: 769 | version "5.2.1" 770 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" 771 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== 772 | 773 | borsh@^0.7.0: 774 | version "0.7.0" 775 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" 776 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== 777 | dependencies: 778 | bn.js "^5.2.0" 779 | bs58 "^4.0.0" 780 | text-encoding-utf-8 "^1.0.2" 781 | 782 | brace-expansion@^1.1.7: 783 | version "1.1.11" 784 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 785 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 786 | dependencies: 787 | balanced-match "^1.0.0" 788 | concat-map "0.0.1" 789 | 790 | brace-expansion@^2.0.1: 791 | version "2.0.1" 792 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 793 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 794 | dependencies: 795 | balanced-match "^1.0.0" 796 | 797 | braces@^3.0.2, braces@~3.0.2: 798 | version "3.0.2" 799 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 800 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 801 | dependencies: 802 | fill-range "^7.0.1" 803 | 804 | brorand@^1.1.0: 805 | version "1.1.0" 806 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 807 | integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== 808 | 809 | browser-stdout@1.3.1: 810 | version "1.3.1" 811 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 812 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 813 | 814 | bs58@^4.0.0, bs58@^4.0.1: 815 | version "4.0.1" 816 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" 817 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== 818 | dependencies: 819 | base-x "^3.0.2" 820 | 821 | buffer-layout@^1.2.0, buffer-layout@^1.2.1, buffer-layout@^1.2.2: 822 | version "1.2.2" 823 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" 824 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== 825 | 826 | buffer@6.0.1: 827 | version "6.0.1" 828 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2" 829 | integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ== 830 | dependencies: 831 | base64-js "^1.3.1" 832 | ieee754 "^1.2.1" 833 | 834 | buffer@6.0.3, buffer@~6.0.3: 835 | version "6.0.3" 836 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" 837 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== 838 | dependencies: 839 | base64-js "^1.3.1" 840 | ieee754 "^1.2.1" 841 | 842 | bufferutil@^4.0.1: 843 | version "4.0.6" 844 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" 845 | integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== 846 | dependencies: 847 | node-gyp-build "^4.3.0" 848 | 849 | cacheable-lookup@^5.0.3: 850 | version "5.0.4" 851 | resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" 852 | integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== 853 | 854 | cacheable-request@^7.0.2: 855 | version "7.0.2" 856 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" 857 | integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== 858 | dependencies: 859 | clone-response "^1.0.2" 860 | get-stream "^5.1.0" 861 | http-cache-semantics "^4.0.0" 862 | keyv "^4.0.0" 863 | lowercase-keys "^2.0.0" 864 | normalize-url "^6.0.1" 865 | responselike "^2.0.0" 866 | 867 | callsites@^3.0.0: 868 | version "3.1.0" 869 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 870 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 871 | 872 | camelcase@^5.3.1: 873 | version "5.3.1" 874 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 875 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 876 | 877 | camelcase@^6.0.0: 878 | version "6.3.0" 879 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 880 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 881 | 882 | chai@^4.3.4: 883 | version "4.3.6" 884 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" 885 | integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== 886 | dependencies: 887 | assertion-error "^1.1.0" 888 | check-error "^1.0.2" 889 | deep-eql "^3.0.1" 890 | get-func-name "^2.0.0" 891 | loupe "^2.3.1" 892 | pathval "^1.1.1" 893 | type-detect "^4.0.5" 894 | 895 | chalk@^2.0.0: 896 | version "2.4.2" 897 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 898 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 899 | dependencies: 900 | ansi-styles "^3.2.1" 901 | escape-string-regexp "^1.0.5" 902 | supports-color "^5.3.0" 903 | 904 | chalk@^4.0.0: 905 | version "4.1.2" 906 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 907 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 908 | dependencies: 909 | ansi-styles "^4.1.0" 910 | supports-color "^7.1.0" 911 | 912 | check-error@^1.0.2: 913 | version "1.0.2" 914 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" 915 | integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== 916 | 917 | chokidar@3.5.1: 918 | version "3.5.1" 919 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 920 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 921 | dependencies: 922 | anymatch "~3.1.1" 923 | braces "~3.0.2" 924 | glob-parent "~5.1.0" 925 | is-binary-path "~2.1.0" 926 | is-glob "~4.0.1" 927 | normalize-path "~3.0.0" 928 | readdirp "~3.5.0" 929 | optionalDependencies: 930 | fsevents "~2.3.1" 931 | 932 | clean-stack@^2.0.0: 933 | version "2.2.0" 934 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" 935 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== 936 | 937 | cliui@^7.0.2: 938 | version "7.0.4" 939 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 940 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 941 | dependencies: 942 | string-width "^4.2.0" 943 | strip-ansi "^6.0.0" 944 | wrap-ansi "^7.0.0" 945 | 946 | clone-response@^1.0.2: 947 | version "1.0.2" 948 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 949 | integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== 950 | dependencies: 951 | mimic-response "^1.0.0" 952 | 953 | color-convert@^1.9.0: 954 | version "1.9.3" 955 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 956 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 957 | dependencies: 958 | color-name "1.1.3" 959 | 960 | color-convert@^2.0.1: 961 | version "2.0.1" 962 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 963 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 964 | dependencies: 965 | color-name "~1.1.4" 966 | 967 | color-name@1.1.3: 968 | version "1.1.3" 969 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 970 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 971 | 972 | color-name@~1.1.4: 973 | version "1.1.4" 974 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 975 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 976 | 977 | commander@^2.20.3: 978 | version "2.20.3" 979 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 980 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 981 | 982 | compress-brotli@^1.3.8: 983 | version "1.3.8" 984 | resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db" 985 | integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== 986 | dependencies: 987 | "@types/json-buffer" "~3.0.0" 988 | json-buffer "~3.0.1" 989 | 990 | concat-map@0.0.1: 991 | version "0.0.1" 992 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 993 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 994 | 995 | create-require@^1.1.0: 996 | version "1.1.1" 997 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 998 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 999 | 1000 | cross-env@^7.0.2: 1001 | version "7.0.3" 1002 | resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" 1003 | integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== 1004 | dependencies: 1005 | cross-spawn "^7.0.1" 1006 | 1007 | cross-fetch@^3.1.5: 1008 | version "3.1.5" 1009 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" 1010 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== 1011 | dependencies: 1012 | node-fetch "2.6.7" 1013 | 1014 | cross-spawn@^7.0.1, cross-spawn@^7.0.2: 1015 | version "7.0.3" 1016 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1017 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1018 | dependencies: 1019 | path-key "^3.1.0" 1020 | shebang-command "^2.0.0" 1021 | which "^2.0.1" 1022 | 1023 | crypto-hash@^1.3.0: 1024 | version "1.3.0" 1025 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247" 1026 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg== 1027 | 1028 | crypto-js@^4.1.1: 1029 | version "4.1.1" 1030 | resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" 1031 | integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== 1032 | 1033 | debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3: 1034 | version "4.3.4" 1035 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1036 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1037 | dependencies: 1038 | ms "2.1.2" 1039 | 1040 | debug@4.3.1: 1041 | version "4.3.1" 1042 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" 1043 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== 1044 | dependencies: 1045 | ms "2.1.2" 1046 | 1047 | decamelize@^4.0.0: 1048 | version "4.0.0" 1049 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" 1050 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== 1051 | 1052 | decompress-response@^6.0.0: 1053 | version "6.0.0" 1054 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" 1055 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== 1056 | dependencies: 1057 | mimic-response "^3.1.0" 1058 | 1059 | deep-eql@^3.0.1: 1060 | version "3.0.1" 1061 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" 1062 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== 1063 | dependencies: 1064 | type-detect "^4.0.0" 1065 | 1066 | deep-is@^0.1.3: 1067 | version "0.1.4" 1068 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 1069 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 1070 | 1071 | defer-to-connect@^2.0.0: 1072 | version "2.0.1" 1073 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" 1074 | integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== 1075 | 1076 | delay@^5.0.0: 1077 | version "5.0.0" 1078 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" 1079 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== 1080 | 1081 | diff-sequences@^26.6.2: 1082 | version "26.6.2" 1083 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" 1084 | integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== 1085 | 1086 | diff@5.0.0: 1087 | version "5.0.0" 1088 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" 1089 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== 1090 | 1091 | diff@^4.0.1: 1092 | version "4.0.2" 1093 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 1094 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 1095 | 1096 | dir-glob@^3.0.1: 1097 | version "3.0.1" 1098 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 1099 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 1100 | dependencies: 1101 | path-type "^4.0.0" 1102 | 1103 | doctrine@^3.0.0: 1104 | version "3.0.0" 1105 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 1106 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 1107 | dependencies: 1108 | esutils "^2.0.2" 1109 | 1110 | dot-case@^3.0.4: 1111 | version "3.0.4" 1112 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" 1113 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== 1114 | dependencies: 1115 | no-case "^3.0.4" 1116 | tslib "^2.0.3" 1117 | 1118 | dotenv-expand@^5.1.0: 1119 | version "5.1.0" 1120 | resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" 1121 | integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== 1122 | 1123 | dotenv@10.0.0, dotenv@^10.0.0: 1124 | version "10.0.0" 1125 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" 1126 | integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== 1127 | 1128 | elliptic@^6.5.4: 1129 | version "6.5.4" 1130 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" 1131 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== 1132 | dependencies: 1133 | bn.js "^4.11.9" 1134 | brorand "^1.1.0" 1135 | hash.js "^1.0.0" 1136 | hmac-drbg "^1.0.1" 1137 | inherits "^2.0.4" 1138 | minimalistic-assert "^1.0.1" 1139 | minimalistic-crypto-utils "^1.0.1" 1140 | 1141 | emoji-regex@^8.0.0: 1142 | version "8.0.0" 1143 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1144 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1145 | 1146 | end-of-stream@^1.1.0: 1147 | version "1.4.4" 1148 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 1149 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 1150 | dependencies: 1151 | once "^1.4.0" 1152 | 1153 | enquirer@^2.3.5: 1154 | version "2.3.6" 1155 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 1156 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 1157 | dependencies: 1158 | ansi-colors "^4.1.1" 1159 | 1160 | es6-promise@^4.0.3: 1161 | version "4.2.8" 1162 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" 1163 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== 1164 | 1165 | es6-promisify@^5.0.0: 1166 | version "5.0.0" 1167 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" 1168 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== 1169 | dependencies: 1170 | es6-promise "^4.0.3" 1171 | 1172 | escalade@^3.1.1: 1173 | version "3.1.1" 1174 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1175 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1176 | 1177 | escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: 1178 | version "4.0.0" 1179 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 1180 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 1181 | 1182 | escape-string-regexp@^1.0.5: 1183 | version "1.0.5" 1184 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1185 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1186 | 1187 | eslint-config-prettier@^7.2.0: 1188 | version "7.2.0" 1189 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz#f4a4bd2832e810e8cc7c1411ec85b3e85c0c53f9" 1190 | integrity sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg== 1191 | 1192 | eslint-scope@^5.1.1: 1193 | version "5.1.1" 1194 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 1195 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 1196 | dependencies: 1197 | esrecurse "^4.3.0" 1198 | estraverse "^4.1.1" 1199 | 1200 | eslint-utils@^2.1.0: 1201 | version "2.1.0" 1202 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" 1203 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== 1204 | dependencies: 1205 | eslint-visitor-keys "^1.1.0" 1206 | 1207 | eslint-utils@^3.0.0: 1208 | version "3.0.0" 1209 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" 1210 | integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== 1211 | dependencies: 1212 | eslint-visitor-keys "^2.0.0" 1213 | 1214 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: 1215 | version "1.3.0" 1216 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 1217 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 1218 | 1219 | eslint-visitor-keys@^2.0.0: 1220 | version "2.1.0" 1221 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" 1222 | integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== 1223 | 1224 | eslint@^7.28.0: 1225 | version "7.32.0" 1226 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" 1227 | integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== 1228 | dependencies: 1229 | "@babel/code-frame" "7.12.11" 1230 | "@eslint/eslintrc" "^0.4.3" 1231 | "@humanwhocodes/config-array" "^0.5.0" 1232 | ajv "^6.10.0" 1233 | chalk "^4.0.0" 1234 | cross-spawn "^7.0.2" 1235 | debug "^4.0.1" 1236 | doctrine "^3.0.0" 1237 | enquirer "^2.3.5" 1238 | escape-string-regexp "^4.0.0" 1239 | eslint-scope "^5.1.1" 1240 | eslint-utils "^2.1.0" 1241 | eslint-visitor-keys "^2.0.0" 1242 | espree "^7.3.1" 1243 | esquery "^1.4.0" 1244 | esutils "^2.0.2" 1245 | fast-deep-equal "^3.1.3" 1246 | file-entry-cache "^6.0.1" 1247 | functional-red-black-tree "^1.0.1" 1248 | glob-parent "^5.1.2" 1249 | globals "^13.6.0" 1250 | ignore "^4.0.6" 1251 | import-fresh "^3.0.0" 1252 | imurmurhash "^0.1.4" 1253 | is-glob "^4.0.0" 1254 | js-yaml "^3.13.1" 1255 | json-stable-stringify-without-jsonify "^1.0.1" 1256 | levn "^0.4.1" 1257 | lodash.merge "^4.6.2" 1258 | minimatch "^3.0.4" 1259 | natural-compare "^1.4.0" 1260 | optionator "^0.9.1" 1261 | progress "^2.0.0" 1262 | regexpp "^3.1.0" 1263 | semver "^7.2.1" 1264 | strip-ansi "^6.0.0" 1265 | strip-json-comments "^3.1.0" 1266 | table "^6.0.9" 1267 | text-table "^0.2.0" 1268 | v8-compile-cache "^2.0.3" 1269 | 1270 | espree@^7.3.0, espree@^7.3.1: 1271 | version "7.3.1" 1272 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" 1273 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== 1274 | dependencies: 1275 | acorn "^7.4.0" 1276 | acorn-jsx "^5.3.1" 1277 | eslint-visitor-keys "^1.3.0" 1278 | 1279 | esprima@^4.0.0: 1280 | version "4.0.1" 1281 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1282 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1283 | 1284 | esquery@^1.4.0: 1285 | version "1.4.0" 1286 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 1287 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 1288 | dependencies: 1289 | estraverse "^5.1.0" 1290 | 1291 | esrecurse@^4.3.0: 1292 | version "4.3.0" 1293 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1294 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1295 | dependencies: 1296 | estraverse "^5.2.0" 1297 | 1298 | estraverse@^4.1.1: 1299 | version "4.3.0" 1300 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1301 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1302 | 1303 | estraverse@^5.1.0, estraverse@^5.2.0: 1304 | version "5.3.0" 1305 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1306 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1307 | 1308 | esutils@^2.0.2: 1309 | version "2.0.3" 1310 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1311 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1312 | 1313 | eventemitter3@^4.0.7: 1314 | version "4.0.7" 1315 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" 1316 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== 1317 | 1318 | eyes@^0.1.8: 1319 | version "0.1.8" 1320 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" 1321 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== 1322 | 1323 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 1324 | version "3.1.3" 1325 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1326 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1327 | 1328 | fast-glob@^3.2.9: 1329 | version "3.2.11" 1330 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" 1331 | integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== 1332 | dependencies: 1333 | "@nodelib/fs.stat" "^2.0.2" 1334 | "@nodelib/fs.walk" "^1.2.3" 1335 | glob-parent "^5.1.2" 1336 | merge2 "^1.3.0" 1337 | micromatch "^4.0.4" 1338 | 1339 | fast-json-stable-stringify@^2.0.0: 1340 | version "2.1.0" 1341 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1342 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1343 | 1344 | fast-levenshtein@^2.0.6: 1345 | version "2.0.6" 1346 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1347 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 1348 | 1349 | fast-stable-stringify@^1.0.0: 1350 | version "1.0.0" 1351 | resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" 1352 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== 1353 | 1354 | fastq@^1.6.0: 1355 | version "1.13.0" 1356 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" 1357 | integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== 1358 | dependencies: 1359 | reusify "^1.0.4" 1360 | 1361 | file-entry-cache@^6.0.1: 1362 | version "6.0.1" 1363 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 1364 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 1365 | dependencies: 1366 | flat-cache "^3.0.4" 1367 | 1368 | file-uri-to-path@1.0.0: 1369 | version "1.0.0" 1370 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" 1371 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== 1372 | 1373 | fill-range@^7.0.1: 1374 | version "7.0.1" 1375 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 1376 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 1377 | dependencies: 1378 | to-regex-range "^5.0.1" 1379 | 1380 | find-up@5.0.0: 1381 | version "5.0.0" 1382 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 1383 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 1384 | dependencies: 1385 | locate-path "^6.0.0" 1386 | path-exists "^4.0.0" 1387 | 1388 | find@^0.3.0: 1389 | version "0.3.0" 1390 | resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8" 1391 | integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw== 1392 | dependencies: 1393 | traverse-chain "~0.1.0" 1394 | 1395 | flat-cache@^3.0.4: 1396 | version "3.0.4" 1397 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 1398 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 1399 | dependencies: 1400 | flatted "^3.1.0" 1401 | rimraf "^3.0.2" 1402 | 1403 | flat@^5.0.2: 1404 | version "5.0.2" 1405 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" 1406 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== 1407 | 1408 | flatted@^3.1.0: 1409 | version "3.2.5" 1410 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" 1411 | integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== 1412 | 1413 | follow-redirects@^1.14.0: 1414 | version "1.15.1" 1415 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" 1416 | integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== 1417 | 1418 | fs-extra@^10.0.0: 1419 | version "10.1.0" 1420 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" 1421 | integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== 1422 | dependencies: 1423 | graceful-fs "^4.2.0" 1424 | jsonfile "^6.0.1" 1425 | universalify "^2.0.0" 1426 | 1427 | fs.realpath@^1.0.0: 1428 | version "1.0.0" 1429 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1430 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1431 | 1432 | fsevents@~2.3.1: 1433 | version "2.3.2" 1434 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 1435 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 1436 | 1437 | functional-red-black-tree@^1.0.1: 1438 | version "1.0.1" 1439 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1440 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 1441 | 1442 | get-caller-file@^2.0.5: 1443 | version "2.0.5" 1444 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1445 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1446 | 1447 | get-func-name@^2.0.0: 1448 | version "2.0.0" 1449 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" 1450 | integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== 1451 | 1452 | get-stream@^5.1.0: 1453 | version "5.2.0" 1454 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 1455 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 1456 | dependencies: 1457 | pump "^3.0.0" 1458 | 1459 | glob-parent@^5.1.2, glob-parent@~5.1.0: 1460 | version "5.1.2" 1461 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 1462 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 1463 | dependencies: 1464 | is-glob "^4.0.1" 1465 | 1466 | glob@7.1.6: 1467 | version "7.1.6" 1468 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1469 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1470 | dependencies: 1471 | fs.realpath "^1.0.0" 1472 | inflight "^1.0.4" 1473 | inherits "2" 1474 | minimatch "^3.0.4" 1475 | once "^1.3.0" 1476 | path-is-absolute "^1.0.0" 1477 | 1478 | glob@^7.1.3: 1479 | version "7.2.3" 1480 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1481 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1482 | dependencies: 1483 | fs.realpath "^1.0.0" 1484 | inflight "^1.0.4" 1485 | inherits "2" 1486 | minimatch "^3.1.1" 1487 | once "^1.3.0" 1488 | path-is-absolute "^1.0.0" 1489 | 1490 | glob@^8.0.3: 1491 | version "8.0.3" 1492 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" 1493 | integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== 1494 | dependencies: 1495 | fs.realpath "^1.0.0" 1496 | inflight "^1.0.4" 1497 | inherits "2" 1498 | minimatch "^5.0.1" 1499 | once "^1.3.0" 1500 | 1501 | globals@^13.6.0, globals@^13.9.0: 1502 | version "13.15.0" 1503 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.15.0.tgz#38113218c907d2f7e98658af246cef8b77e90bac" 1504 | integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== 1505 | dependencies: 1506 | type-fest "^0.20.2" 1507 | 1508 | globby@^11.0.3: 1509 | version "11.1.0" 1510 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 1511 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 1512 | dependencies: 1513 | array-union "^2.1.0" 1514 | dir-glob "^3.0.1" 1515 | fast-glob "^3.2.9" 1516 | ignore "^5.2.0" 1517 | merge2 "^1.4.1" 1518 | slash "^3.0.0" 1519 | 1520 | got@^11.8.2: 1521 | version "11.8.5" 1522 | resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" 1523 | integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== 1524 | dependencies: 1525 | "@sindresorhus/is" "^4.0.0" 1526 | "@szmarczak/http-timer" "^4.0.5" 1527 | "@types/cacheable-request" "^6.0.1" 1528 | "@types/responselike" "^1.0.0" 1529 | cacheable-lookup "^5.0.3" 1530 | cacheable-request "^7.0.2" 1531 | decompress-response "^6.0.0" 1532 | http2-wrapper "^1.0.0-beta.5.2" 1533 | lowercase-keys "^2.0.0" 1534 | p-cancelable "^2.0.0" 1535 | responselike "^2.0.0" 1536 | 1537 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 1538 | version "4.2.10" 1539 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1540 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1541 | 1542 | growl@1.10.5: 1543 | version "1.10.5" 1544 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1545 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1546 | 1547 | has-flag@^3.0.0: 1548 | version "3.0.0" 1549 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1550 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1551 | 1552 | has-flag@^4.0.0: 1553 | version "4.0.0" 1554 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1555 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1556 | 1557 | hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: 1558 | version "1.1.7" 1559 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 1560 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 1561 | dependencies: 1562 | inherits "^2.0.3" 1563 | minimalistic-assert "^1.0.1" 1564 | 1565 | he@1.2.0: 1566 | version "1.2.0" 1567 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1568 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1569 | 1570 | hmac-drbg@^1.0.1: 1571 | version "1.0.1" 1572 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1573 | integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== 1574 | dependencies: 1575 | hash.js "^1.0.3" 1576 | minimalistic-assert "^1.0.0" 1577 | minimalistic-crypto-utils "^1.0.1" 1578 | 1579 | http-cache-semantics@^4.0.0: 1580 | version "4.1.0" 1581 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 1582 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 1583 | 1584 | http2-wrapper@^1.0.0-beta.5.2: 1585 | version "1.0.3" 1586 | resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" 1587 | integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== 1588 | dependencies: 1589 | quick-lru "^5.1.1" 1590 | resolve-alpn "^1.0.0" 1591 | 1592 | https-proxy-agent@^5.0.0: 1593 | version "5.0.1" 1594 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 1595 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 1596 | dependencies: 1597 | agent-base "6" 1598 | debug "4" 1599 | 1600 | ieee754@^1.2.1: 1601 | version "1.2.1" 1602 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 1603 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 1604 | 1605 | ignore@^4.0.6: 1606 | version "4.0.6" 1607 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1608 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1609 | 1610 | ignore@^5.1.8, ignore@^5.2.0: 1611 | version "5.2.0" 1612 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" 1613 | integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== 1614 | 1615 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1616 | version "3.3.0" 1617 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1618 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1619 | dependencies: 1620 | parent-module "^1.0.0" 1621 | resolve-from "^4.0.0" 1622 | 1623 | imurmurhash@^0.1.4: 1624 | version "0.1.4" 1625 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1626 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1627 | 1628 | indent-string@^4.0.0: 1629 | version "4.0.0" 1630 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" 1631 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== 1632 | 1633 | inflight@^1.0.4: 1634 | version "1.0.6" 1635 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1636 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1637 | dependencies: 1638 | once "^1.3.0" 1639 | wrappy "1" 1640 | 1641 | inherits@2, inherits@^2.0.3, inherits@^2.0.4: 1642 | version "2.0.4" 1643 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1644 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1645 | 1646 | is-binary-path@~2.1.0: 1647 | version "2.1.0" 1648 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 1649 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 1650 | dependencies: 1651 | binary-extensions "^2.0.0" 1652 | 1653 | is-extglob@^2.1.1: 1654 | version "2.1.1" 1655 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1656 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== 1657 | 1658 | is-fullwidth-code-point@^2.0.0: 1659 | version "2.0.0" 1660 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1661 | integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== 1662 | 1663 | is-fullwidth-code-point@^3.0.0: 1664 | version "3.0.0" 1665 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1666 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1667 | 1668 | is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: 1669 | version "4.0.3" 1670 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1671 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1672 | dependencies: 1673 | is-extglob "^2.1.1" 1674 | 1675 | is-number@^7.0.0: 1676 | version "7.0.0" 1677 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1678 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1679 | 1680 | is-plain-obj@^2.1.0: 1681 | version "2.1.0" 1682 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" 1683 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== 1684 | 1685 | isexe@^2.0.0: 1686 | version "2.0.0" 1687 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1688 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1689 | 1690 | isomorphic-ws@^4.0.1: 1691 | version "4.0.1" 1692 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" 1693 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== 1694 | 1695 | jayson@^3.4.4: 1696 | version "3.6.6" 1697 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.6.tgz#189984f624e398f831bd2be8e8c80eb3abf764a1" 1698 | integrity sha512-f71uvrAWTtrwoww6MKcl9phQTC+56AopLyEenWvKVAIMz+q0oVGj6tenLZ7Z6UiPBkJtKLj4kt0tACllFQruGQ== 1699 | dependencies: 1700 | "@types/connect" "^3.4.33" 1701 | "@types/express-serve-static-core" "^4.17.9" 1702 | "@types/lodash" "^4.14.159" 1703 | "@types/node" "^12.12.54" 1704 | "@types/ws" "^7.4.4" 1705 | JSONStream "^1.3.5" 1706 | commander "^2.20.3" 1707 | delay "^5.0.0" 1708 | es6-promisify "^5.0.0" 1709 | eyes "^0.1.8" 1710 | isomorphic-ws "^4.0.1" 1711 | json-stringify-safe "^5.0.1" 1712 | lodash "^4.17.20" 1713 | uuid "^8.3.2" 1714 | ws "^7.4.5" 1715 | 1716 | jest-diff@^26.0.0: 1717 | version "26.6.2" 1718 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" 1719 | integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== 1720 | dependencies: 1721 | chalk "^4.0.0" 1722 | diff-sequences "^26.6.2" 1723 | jest-get-type "^26.3.0" 1724 | pretty-format "^26.6.2" 1725 | 1726 | jest-get-type@^26.3.0: 1727 | version "26.3.0" 1728 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" 1729 | integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== 1730 | 1731 | js-sha256@^0.9.0: 1732 | version "0.9.0" 1733 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" 1734 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== 1735 | 1736 | js-sha3@^0.8.0: 1737 | version "0.8.0" 1738 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" 1739 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== 1740 | 1741 | js-tokens@^4.0.0: 1742 | version "4.0.0" 1743 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1744 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1745 | 1746 | js-yaml@4.0.0: 1747 | version "4.0.0" 1748 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" 1749 | integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== 1750 | dependencies: 1751 | argparse "^2.0.1" 1752 | 1753 | js-yaml@^3.13.1: 1754 | version "3.14.1" 1755 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 1756 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 1757 | dependencies: 1758 | argparse "^1.0.7" 1759 | esprima "^4.0.0" 1760 | 1761 | json-buffer@3.0.1, json-buffer@~3.0.1: 1762 | version "3.0.1" 1763 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" 1764 | integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== 1765 | 1766 | json-schema-traverse@^0.4.1: 1767 | version "0.4.1" 1768 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1769 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1770 | 1771 | json-schema-traverse@^1.0.0: 1772 | version "1.0.0" 1773 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 1774 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 1775 | 1776 | json-stable-stringify-without-jsonify@^1.0.1: 1777 | version "1.0.1" 1778 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1779 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 1780 | 1781 | json-stringify-safe@^5.0.1: 1782 | version "5.0.1" 1783 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1784 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== 1785 | 1786 | jsonc-parser@^3.0.0: 1787 | version "3.0.0" 1788 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" 1789 | integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== 1790 | 1791 | jsonfile@^6.0.1: 1792 | version "6.1.0" 1793 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 1794 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1795 | dependencies: 1796 | universalify "^2.0.0" 1797 | optionalDependencies: 1798 | graceful-fs "^4.1.6" 1799 | 1800 | jsonparse@^1.2.0: 1801 | version "1.3.1" 1802 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1803 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== 1804 | 1805 | keyv@^4.0.0: 1806 | version "4.3.2" 1807 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.2.tgz#e839df676a0c7ee594c8835e7c1c83742558e5c2" 1808 | integrity sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw== 1809 | dependencies: 1810 | compress-brotli "^1.3.8" 1811 | json-buffer "3.0.1" 1812 | 1813 | levn@^0.4.1: 1814 | version "0.4.1" 1815 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1816 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1817 | dependencies: 1818 | prelude-ls "^1.2.1" 1819 | type-check "~0.4.0" 1820 | 1821 | locate-path@^6.0.0: 1822 | version "6.0.0" 1823 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1824 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1825 | dependencies: 1826 | p-locate "^5.0.0" 1827 | 1828 | lodash.merge@^4.6.2: 1829 | version "4.6.2" 1830 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1831 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1832 | 1833 | lodash.truncate@^4.4.2: 1834 | version "4.4.2" 1835 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" 1836 | integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== 1837 | 1838 | lodash@^4.17.20: 1839 | version "4.17.21" 1840 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1841 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1842 | 1843 | log-symbols@4.0.0: 1844 | version "4.0.0" 1845 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" 1846 | integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== 1847 | dependencies: 1848 | chalk "^4.0.0" 1849 | 1850 | loupe@^2.3.1: 1851 | version "2.3.4" 1852 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" 1853 | integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== 1854 | dependencies: 1855 | get-func-name "^2.0.0" 1856 | 1857 | lower-case@^2.0.2: 1858 | version "2.0.2" 1859 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" 1860 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== 1861 | dependencies: 1862 | tslib "^2.0.3" 1863 | 1864 | lowercase-keys@^2.0.0: 1865 | version "2.0.0" 1866 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 1867 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 1868 | 1869 | lru-cache@^6.0.0: 1870 | version "6.0.0" 1871 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1872 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1873 | dependencies: 1874 | yallist "^4.0.0" 1875 | 1876 | lunr@^2.3.9: 1877 | version "2.3.9" 1878 | resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" 1879 | integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== 1880 | 1881 | make-error@^1.1.1: 1882 | version "1.3.6" 1883 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1884 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1885 | 1886 | marked@^4.0.16: 1887 | version "4.0.17" 1888 | resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.17.tgz#1186193d85bb7882159cdcfc57d1dfccaffb3fe9" 1889 | integrity sha512-Wfk0ATOK5iPxM4ptrORkFemqroz0ZDxp5MWfYA7H/F+wO17NRWV5Ypxi6p3g2Xmw2bKeiYOl6oVnLHKxBA0VhA== 1890 | 1891 | merge2@^1.3.0, merge2@^1.4.1: 1892 | version "1.4.1" 1893 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1894 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1895 | 1896 | micromatch@^4.0.4: 1897 | version "4.0.5" 1898 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" 1899 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== 1900 | dependencies: 1901 | braces "^3.0.2" 1902 | picomatch "^2.3.1" 1903 | 1904 | mimic-response@^1.0.0: 1905 | version "1.0.1" 1906 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 1907 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 1908 | 1909 | mimic-response@^3.1.0: 1910 | version "3.1.0" 1911 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" 1912 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== 1913 | 1914 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 1915 | version "1.0.1" 1916 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 1917 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 1918 | 1919 | minimalistic-crypto-utils@^1.0.1: 1920 | version "1.0.1" 1921 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 1922 | integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== 1923 | 1924 | minimatch@3.0.4: 1925 | version "3.0.4" 1926 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1927 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1928 | dependencies: 1929 | brace-expansion "^1.1.7" 1930 | 1931 | minimatch@^3.0.4, minimatch@^3.1.1: 1932 | version "3.1.2" 1933 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1934 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1935 | dependencies: 1936 | brace-expansion "^1.1.7" 1937 | 1938 | minimatch@^5.0.1, minimatch@^5.1.0: 1939 | version "5.1.0" 1940 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" 1941 | integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== 1942 | dependencies: 1943 | brace-expansion "^2.0.1" 1944 | 1945 | mocha@^8.4.0: 1946 | version "8.4.0" 1947 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" 1948 | integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== 1949 | dependencies: 1950 | "@ungap/promise-all-settled" "1.1.2" 1951 | ansi-colors "4.1.1" 1952 | browser-stdout "1.3.1" 1953 | chokidar "3.5.1" 1954 | debug "4.3.1" 1955 | diff "5.0.0" 1956 | escape-string-regexp "4.0.0" 1957 | find-up "5.0.0" 1958 | glob "7.1.6" 1959 | growl "1.10.5" 1960 | he "1.2.0" 1961 | js-yaml "4.0.0" 1962 | log-symbols "4.0.0" 1963 | minimatch "3.0.4" 1964 | ms "2.1.3" 1965 | nanoid "3.1.20" 1966 | serialize-javascript "5.0.1" 1967 | strip-json-comments "3.1.1" 1968 | supports-color "8.1.1" 1969 | which "2.0.2" 1970 | wide-align "1.1.3" 1971 | workerpool "6.1.0" 1972 | yargs "16.2.0" 1973 | yargs-parser "20.2.4" 1974 | yargs-unparser "2.0.0" 1975 | 1976 | ms@2.1.2: 1977 | version "2.1.2" 1978 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1979 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1980 | 1981 | ms@2.1.3: 1982 | version "2.1.3" 1983 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1984 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1985 | 1986 | nanoid@3.1.20: 1987 | version "3.1.20" 1988 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" 1989 | integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== 1990 | 1991 | natural-compare@^1.4.0: 1992 | version "1.4.0" 1993 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1994 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 1995 | 1996 | no-case@^3.0.4: 1997 | version "3.0.4" 1998 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" 1999 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== 2000 | dependencies: 2001 | lower-case "^2.0.2" 2002 | tslib "^2.0.3" 2003 | 2004 | node-addon-api@^2.0.0: 2005 | version "2.0.2" 2006 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" 2007 | integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== 2008 | 2009 | node-fetch@2, node-fetch@2.6.7: 2010 | version "2.6.7" 2011 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" 2012 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== 2013 | dependencies: 2014 | whatwg-url "^5.0.0" 2015 | 2016 | node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: 2017 | version "4.5.0" 2018 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" 2019 | integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== 2020 | 2021 | normalize-path@^3.0.0, normalize-path@~3.0.0: 2022 | version "3.0.0" 2023 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2024 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2025 | 2026 | normalize-url@^6.0.1: 2027 | version "6.1.0" 2028 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" 2029 | integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== 2030 | 2031 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 2032 | version "1.4.0" 2033 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2034 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 2035 | dependencies: 2036 | wrappy "1" 2037 | 2038 | optionator@^0.9.1: 2039 | version "0.9.1" 2040 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" 2041 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== 2042 | dependencies: 2043 | deep-is "^0.1.3" 2044 | fast-levenshtein "^2.0.6" 2045 | levn "^0.4.1" 2046 | prelude-ls "^1.2.1" 2047 | type-check "^0.4.0" 2048 | word-wrap "^1.2.3" 2049 | 2050 | p-cancelable@^2.0.0: 2051 | version "2.1.1" 2052 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" 2053 | integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== 2054 | 2055 | p-limit@^3.0.2: 2056 | version "3.1.0" 2057 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2058 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2059 | dependencies: 2060 | yocto-queue "^0.1.0" 2061 | 2062 | p-locate@^5.0.0: 2063 | version "5.0.0" 2064 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 2065 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 2066 | dependencies: 2067 | p-limit "^3.0.2" 2068 | 2069 | p-map@^4.0.0: 2070 | version "4.0.0" 2071 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" 2072 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== 2073 | dependencies: 2074 | aggregate-error "^3.0.0" 2075 | 2076 | pako@^2.0.3: 2077 | version "2.0.4" 2078 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" 2079 | integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== 2080 | 2081 | parent-module@^1.0.0: 2082 | version "1.0.1" 2083 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 2084 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 2085 | dependencies: 2086 | callsites "^3.0.0" 2087 | 2088 | path-exists@^4.0.0: 2089 | version "4.0.0" 2090 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2091 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2092 | 2093 | path-is-absolute@^1.0.0: 2094 | version "1.0.1" 2095 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2096 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2097 | 2098 | path-key@^3.1.0: 2099 | version "3.1.1" 2100 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2101 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2102 | 2103 | path-type@^4.0.0: 2104 | version "4.0.0" 2105 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 2106 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 2107 | 2108 | pathval@^1.1.1: 2109 | version "1.1.1" 2110 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" 2111 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== 2112 | 2113 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 2114 | version "2.3.1" 2115 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2116 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2117 | 2118 | prelude-ls@^1.2.1: 2119 | version "1.2.1" 2120 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 2121 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 2122 | 2123 | prettier@^2.0.5: 2124 | version "2.7.1" 2125 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" 2126 | integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== 2127 | 2128 | pretty-format@^26.0.0, pretty-format@^26.6.2: 2129 | version "26.6.2" 2130 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" 2131 | integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== 2132 | dependencies: 2133 | "@jest/types" "^26.6.2" 2134 | ansi-regex "^5.0.0" 2135 | ansi-styles "^4.0.0" 2136 | react-is "^17.0.1" 2137 | 2138 | progress@^2.0.0: 2139 | version "2.0.3" 2140 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2141 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 2142 | 2143 | pump@^3.0.0: 2144 | version "3.0.0" 2145 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 2146 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 2147 | dependencies: 2148 | end-of-stream "^1.1.0" 2149 | once "^1.3.1" 2150 | 2151 | punycode@^2.1.0: 2152 | version "2.1.1" 2153 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2154 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2155 | 2156 | queue-microtask@^1.2.2: 2157 | version "1.2.3" 2158 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 2159 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 2160 | 2161 | quick-lru@^5.1.1: 2162 | version "5.1.1" 2163 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" 2164 | integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== 2165 | 2166 | randombytes@^2.1.0: 2167 | version "2.1.0" 2168 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 2169 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 2170 | dependencies: 2171 | safe-buffer "^5.1.0" 2172 | 2173 | react-is@^17.0.1: 2174 | version "17.0.2" 2175 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" 2176 | integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== 2177 | 2178 | readdirp@~3.5.0: 2179 | version "3.5.0" 2180 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 2181 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 2182 | dependencies: 2183 | picomatch "^2.2.1" 2184 | 2185 | regenerator-runtime@^0.13.4: 2186 | version "0.13.9" 2187 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" 2188 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== 2189 | 2190 | regexpp@^3.1.0: 2191 | version "3.2.0" 2192 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" 2193 | integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== 2194 | 2195 | require-directory@^2.1.1: 2196 | version "2.1.1" 2197 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2198 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2199 | 2200 | require-from-string@^2.0.2: 2201 | version "2.0.2" 2202 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 2203 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 2204 | 2205 | resolve-alpn@^1.0.0: 2206 | version "1.2.1" 2207 | resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" 2208 | integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== 2209 | 2210 | resolve-from@^4.0.0: 2211 | version "4.0.0" 2212 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2213 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2214 | 2215 | responselike@^2.0.0: 2216 | version "2.0.0" 2217 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" 2218 | integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== 2219 | dependencies: 2220 | lowercase-keys "^2.0.0" 2221 | 2222 | reusify@^1.0.4: 2223 | version "1.0.4" 2224 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 2225 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 2226 | 2227 | rimraf@^3.0.2: 2228 | version "3.0.2" 2229 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 2230 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 2231 | dependencies: 2232 | glob "^7.1.3" 2233 | 2234 | rpc-websockets@^7.4.2, rpc-websockets@^7.5.0: 2235 | version "7.5.0" 2236 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.0.tgz#bbeb87572e66703ff151e50af1658f98098e2748" 2237 | integrity sha512-9tIRi1uZGy7YmDjErf1Ax3wtqdSSLIlnmL5OtOzgd5eqPKbsPpwDP5whUDO2LQay3Xp0CcHlcNSGzacNRluBaQ== 2238 | dependencies: 2239 | "@babel/runtime" "^7.17.2" 2240 | eventemitter3 "^4.0.7" 2241 | uuid "^8.3.2" 2242 | ws "^8.5.0" 2243 | optionalDependencies: 2244 | bufferutil "^4.0.1" 2245 | utf-8-validate "^5.0.2" 2246 | 2247 | run-parallel@^1.1.9: 2248 | version "1.2.0" 2249 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" 2250 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== 2251 | dependencies: 2252 | queue-microtask "^1.2.2" 2253 | 2254 | safe-buffer@^5.0.1, safe-buffer@^5.1.0: 2255 | version "5.2.1" 2256 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2257 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2258 | 2259 | secp256k1@^4.0.2: 2260 | version "4.0.3" 2261 | resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" 2262 | integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== 2263 | dependencies: 2264 | elliptic "^6.5.4" 2265 | node-addon-api "^2.0.0" 2266 | node-gyp-build "^4.2.0" 2267 | 2268 | semver@^7.2.1, semver@^7.3.5: 2269 | version "7.3.7" 2270 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 2271 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 2272 | dependencies: 2273 | lru-cache "^6.0.0" 2274 | 2275 | serialize-javascript@5.0.1: 2276 | version "5.0.1" 2277 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" 2278 | integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== 2279 | dependencies: 2280 | randombytes "^2.1.0" 2281 | 2282 | shebang-command@^2.0.0: 2283 | version "2.0.0" 2284 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2285 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2286 | dependencies: 2287 | shebang-regex "^3.0.0" 2288 | 2289 | shebang-regex@^3.0.0: 2290 | version "3.0.0" 2291 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2292 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2293 | 2294 | shiki@^0.10.1: 2295 | version "0.10.1" 2296 | resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" 2297 | integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== 2298 | dependencies: 2299 | jsonc-parser "^3.0.0" 2300 | vscode-oniguruma "^1.6.1" 2301 | vscode-textmate "5.2.0" 2302 | 2303 | slash@^3.0.0: 2304 | version "3.0.0" 2305 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2306 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2307 | 2308 | slice-ansi@^4.0.0: 2309 | version "4.0.0" 2310 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" 2311 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== 2312 | dependencies: 2313 | ansi-styles "^4.0.0" 2314 | astral-regex "^2.0.0" 2315 | is-fullwidth-code-point "^3.0.0" 2316 | 2317 | snake-case@^3.0.4: 2318 | version "3.0.4" 2319 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" 2320 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== 2321 | dependencies: 2322 | dot-case "^3.0.4" 2323 | tslib "^2.0.3" 2324 | 2325 | sprintf-js@~1.0.2: 2326 | version "1.0.3" 2327 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2328 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2329 | 2330 | "string-width@^1.0.2 || 2": 2331 | version "2.1.1" 2332 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2333 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2334 | dependencies: 2335 | is-fullwidth-code-point "^2.0.0" 2336 | strip-ansi "^4.0.0" 2337 | 2338 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2339 | version "4.2.3" 2340 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2341 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2342 | dependencies: 2343 | emoji-regex "^8.0.0" 2344 | is-fullwidth-code-point "^3.0.0" 2345 | strip-ansi "^6.0.1" 2346 | 2347 | strip-ansi@^4.0.0: 2348 | version "4.0.0" 2349 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2350 | integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== 2351 | dependencies: 2352 | ansi-regex "^3.0.0" 2353 | 2354 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2355 | version "6.0.1" 2356 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2357 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2358 | dependencies: 2359 | ansi-regex "^5.0.1" 2360 | 2361 | strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 2362 | version "3.1.1" 2363 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2364 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2365 | 2366 | superstruct@^0.14.2: 2367 | version "0.14.2" 2368 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" 2369 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== 2370 | 2371 | supports-color@8.1.1: 2372 | version "8.1.1" 2373 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2374 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2375 | dependencies: 2376 | has-flag "^4.0.0" 2377 | 2378 | supports-color@^5.3.0: 2379 | version "5.5.0" 2380 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2381 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2382 | dependencies: 2383 | has-flag "^3.0.0" 2384 | 2385 | supports-color@^7.1.0: 2386 | version "7.2.0" 2387 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2388 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2389 | dependencies: 2390 | has-flag "^4.0.0" 2391 | 2392 | table@^6.0.9: 2393 | version "6.8.0" 2394 | resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" 2395 | integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== 2396 | dependencies: 2397 | ajv "^8.0.1" 2398 | lodash.truncate "^4.4.2" 2399 | slice-ansi "^4.0.0" 2400 | string-width "^4.2.3" 2401 | strip-ansi "^6.0.1" 2402 | 2403 | tardis-dev@^13.1.3: 2404 | version "13.4.8" 2405 | resolved "https://registry.yarnpkg.com/tardis-dev/-/tardis-dev-13.4.8.tgz#67bbdbf8c88cd8f62652c426a319f544f1866ee5" 2406 | integrity sha512-duMvWiH9GdPDUJz+P1qTNRNgantR2LrvhMTZtZC2JSM+K7hvbbIUieq5Lqa29eUxJPrcslQh8vp49gXXgdjZFg== 2407 | dependencies: 2408 | "@types/bintrees" "^1.0.3" 2409 | bintrees "^1.0.2" 2410 | debug "^4.3.3" 2411 | fs-extra "^10.0.0" 2412 | got "^11.8.2" 2413 | https-proxy-agent "^5.0.0" 2414 | p-map "^4.0.0" 2415 | ws "^8.4.0" 2416 | 2417 | text-encoding-utf-8@^1.0.2: 2418 | version "1.0.2" 2419 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" 2420 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== 2421 | 2422 | text-table@^0.2.0: 2423 | version "0.2.0" 2424 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2425 | integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== 2426 | 2427 | "through@>=2.2.7 <3": 2428 | version "2.3.8" 2429 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2430 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== 2431 | 2432 | to-regex-range@^5.0.1: 2433 | version "5.0.1" 2434 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2435 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2436 | dependencies: 2437 | is-number "^7.0.0" 2438 | 2439 | toformat@^2.0.0: 2440 | version "2.0.0" 2441 | resolved "https://registry.yarnpkg.com/toformat/-/toformat-2.0.0.tgz#7a043fd2dfbe9021a4e36e508835ba32056739d8" 2442 | integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ== 2443 | 2444 | toml@^3.0.0: 2445 | version "3.0.0" 2446 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" 2447 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== 2448 | 2449 | tr46@~0.0.3: 2450 | version "0.0.3" 2451 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 2452 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 2453 | 2454 | traverse-chain@~0.1.0: 2455 | version "0.1.0" 2456 | resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1" 2457 | integrity sha512-up6Yvai4PYKhpNp5PkYtx50m3KbwQrqDwbuZP/ItyL64YEWHAvH6Md83LFLV/GRSk/BoUVwwgUzX6SOQSbsfAg== 2458 | 2459 | ts-node@^10.7.0: 2460 | version "10.8.1" 2461 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" 2462 | integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== 2463 | dependencies: 2464 | "@cspotcode/source-map-support" "^0.8.0" 2465 | "@tsconfig/node10" "^1.0.7" 2466 | "@tsconfig/node12" "^1.0.7" 2467 | "@tsconfig/node14" "^1.0.0" 2468 | "@tsconfig/node16" "^1.0.2" 2469 | acorn "^8.4.1" 2470 | acorn-walk "^8.1.1" 2471 | arg "^4.1.0" 2472 | create-require "^1.1.0" 2473 | diff "^4.0.1" 2474 | make-error "^1.1.1" 2475 | v8-compile-cache-lib "^3.0.1" 2476 | yn "3.1.1" 2477 | 2478 | tslib@^1.8.1: 2479 | version "1.14.1" 2480 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2481 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2482 | 2483 | tslib@^2.0.3: 2484 | version "2.4.0" 2485 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 2486 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 2487 | 2488 | tsutils@^3.21.0: 2489 | version "3.21.0" 2490 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 2491 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 2492 | dependencies: 2493 | tslib "^1.8.1" 2494 | 2495 | tweetnacl@^1.0.0: 2496 | version "1.0.3" 2497 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" 2498 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== 2499 | 2500 | type-check@^0.4.0, type-check@~0.4.0: 2501 | version "0.4.0" 2502 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 2503 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 2504 | dependencies: 2505 | prelude-ls "^1.2.1" 2506 | 2507 | type-detect@^4.0.0, type-detect@^4.0.5: 2508 | version "4.0.8" 2509 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2510 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2511 | 2512 | type-fest@^0.20.2: 2513 | version "0.20.2" 2514 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 2515 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 2516 | 2517 | typedoc@^0.22.5: 2518 | version "0.22.17" 2519 | resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.17.tgz#bc51cc95f569040112504300831cdac4f8089b7b" 2520 | integrity sha512-h6+uXHVVCPDaANzjwzdsj9aePBjZiBTpiMpBBeyh1zcN2odVsDCNajz8zyKnixF93HJeGpl34j/70yoEE5BfNg== 2521 | dependencies: 2522 | glob "^8.0.3" 2523 | lunr "^2.3.9" 2524 | marked "^4.0.16" 2525 | minimatch "^5.1.0" 2526 | shiki "^0.10.1" 2527 | 2528 | typescript@^4.6.3: 2529 | version "4.7.4" 2530 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" 2531 | integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== 2532 | 2533 | universalify@^2.0.0: 2534 | version "2.0.0" 2535 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 2536 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 2537 | 2538 | uri-js@^4.2.2: 2539 | version "4.4.1" 2540 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2541 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2542 | dependencies: 2543 | punycode "^2.1.0" 2544 | 2545 | utf-8-validate@^5.0.2: 2546 | version "5.0.9" 2547 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.9.tgz#ba16a822fbeedff1a58918f2a6a6b36387493ea3" 2548 | integrity sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q== 2549 | dependencies: 2550 | node-gyp-build "^4.3.0" 2551 | 2552 | uuid@^8.3.2: 2553 | version "8.3.2" 2554 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2555 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2556 | 2557 | v8-compile-cache-lib@^3.0.1: 2558 | version "3.0.1" 2559 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 2560 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 2561 | 2562 | v8-compile-cache@^2.0.3: 2563 | version "2.3.0" 2564 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" 2565 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== 2566 | 2567 | vscode-oniguruma@^1.6.1: 2568 | version "1.6.2" 2569 | resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607" 2570 | integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA== 2571 | 2572 | vscode-textmate@5.2.0: 2573 | version "5.2.0" 2574 | resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" 2575 | integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== 2576 | 2577 | webidl-conversions@^3.0.0: 2578 | version "3.0.1" 2579 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2580 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 2581 | 2582 | whatwg-url@^5.0.0: 2583 | version "5.0.0" 2584 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 2585 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 2586 | dependencies: 2587 | tr46 "~0.0.3" 2588 | webidl-conversions "^3.0.0" 2589 | 2590 | which@2.0.2, which@^2.0.1: 2591 | version "2.0.2" 2592 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2593 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2594 | dependencies: 2595 | isexe "^2.0.0" 2596 | 2597 | wide-align@1.1.3: 2598 | version "1.1.3" 2599 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2600 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2601 | dependencies: 2602 | string-width "^1.0.2 || 2" 2603 | 2604 | word-wrap@^1.2.3: 2605 | version "1.2.3" 2606 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 2607 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 2608 | 2609 | workerpool@6.1.0: 2610 | version "6.1.0" 2611 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" 2612 | integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== 2613 | 2614 | wrap-ansi@^7.0.0: 2615 | version "7.0.0" 2616 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2617 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2618 | dependencies: 2619 | ansi-styles "^4.0.0" 2620 | string-width "^4.1.0" 2621 | strip-ansi "^6.0.0" 2622 | 2623 | wrappy@1: 2624 | version "1.0.2" 2625 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2626 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2627 | 2628 | ws@^7.4.5: 2629 | version "7.5.8" 2630 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.8.tgz#ac2729881ab9e7cbaf8787fe3469a48c5c7f636a" 2631 | integrity sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw== 2632 | 2633 | ws@^8.4.0, ws@^8.5.0: 2634 | version "8.8.0" 2635 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.0.tgz#8e71c75e2f6348dbf8d78005107297056cb77769" 2636 | integrity sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ== 2637 | 2638 | y18n@^5.0.5: 2639 | version "5.0.8" 2640 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2641 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2642 | 2643 | yallist@^4.0.0: 2644 | version "4.0.0" 2645 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 2646 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 2647 | 2648 | yargs-parser@20.2.4: 2649 | version "20.2.4" 2650 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" 2651 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== 2652 | 2653 | yargs-parser@^20.2.2: 2654 | version "20.2.9" 2655 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 2656 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 2657 | 2658 | yargs-parser@^21.0.0: 2659 | version "21.0.1" 2660 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" 2661 | integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== 2662 | 2663 | yargs-unparser@2.0.0: 2664 | version "2.0.0" 2665 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" 2666 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== 2667 | dependencies: 2668 | camelcase "^6.0.0" 2669 | decamelize "^4.0.0" 2670 | flat "^5.0.2" 2671 | is-plain-obj "^2.1.0" 2672 | 2673 | yargs@16.2.0: 2674 | version "16.2.0" 2675 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 2676 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 2677 | dependencies: 2678 | cliui "^7.0.2" 2679 | escalade "^3.1.1" 2680 | get-caller-file "^2.0.5" 2681 | require-directory "^2.1.1" 2682 | string-width "^4.2.0" 2683 | y18n "^5.0.5" 2684 | yargs-parser "^20.2.2" 2685 | 2686 | yargs@^17.0.1: 2687 | version "17.5.1" 2688 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" 2689 | integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== 2690 | dependencies: 2691 | cliui "^7.0.2" 2692 | escalade "^3.1.1" 2693 | get-caller-file "^2.0.5" 2694 | require-directory "^2.1.1" 2695 | string-width "^4.2.3" 2696 | y18n "^5.0.5" 2697 | yargs-parser "^21.0.0" 2698 | 2699 | yn@3.1.1: 2700 | version "3.1.1" 2701 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2702 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2703 | 2704 | yocto-queue@^0.1.0: 2705 | version "0.1.0" 2706 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2707 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2708 | --------------------------------------------------------------------------------